控件的属性是个类,如何给添加自定义属性(C#)
控件的属性是个类,如何给添加自定义属性(C#)
using System;
using System.Collections.Generic; using System.Text; using System.Data; using System.Collections; using System.Windows.Forms; namespace CSFramework.Tech2011 { /// <summary> /// 扩展DataRow.通过扩展DataRow,我们的新MyDataRow拥有属性:UserFullName 和方法GetUserFullName() /// 注意:这里又用到Composite模式.这个模式太基础,应用无处不在. /// </summary> public class MyDataRow { private DataRow _source = null; //组合DataRow public DataRow Row { get { return _source; } } public MyDataRow(DataRow source) { _source = source; } //注意:扩展DataRow,新属性 public string UserFullName { get { return "ID:" + _source["user_id"].ToString() + " NAME:" + _source["user_name"].ToString(); } } //如果举例还不够,再加个方法 public string GetUserFullName() { return "ID:" + _source["user_id"].ToString() + " NAME:" + _source["user_name"].ToString(); } } /// <summary> /// 组合模式演示,将DataTable.Rows由构造器传入。 /// 这个类组合DataTable.Rows ,用IList结构存储。 /// </summary> public class MyDataRows { private IList _rows; /// <summary> /// 构建索引器 /// </summary> public MyDataRow this[int index] { get { return (MyDataRow)_rows[index]; } } //将DataTable.Rows由构造器传入。 public MyDataRows(DataRowCollection rows) { _rows = new ArrayList(); //因传进参数rows为DataTable.Rows,而不是MyDataRow的Collection.需要转换 foreach (DataRow r in rows) { MyDataRow temp = new MyDataRow(r); //构建自己的类 _rows.Add(temp); } } //设计一个自定义的方法. public MyDataRow FindRowByFieldValue(string fieldName, string value) { foreach (MyDataRow row in _rows) { if (row.Row[fieldName].ToString().ToUpper() == value.ToUpper()) return row; } return null; } } /// <summary> /// 自定义DataTable .也是Compoiste /// </summary> public class MyDataTable { private MyDataRows _MyRows = null; public MyDataRows MyRows { get { return _MyRows; } } public MyDataTable(DataTable source) { _MyRows = new MyDataRows(source.Rows); } } /// <summary> /// 测试用的类 /// </summary> public class vjsdn_Composite { private MyDataTable CreateTestTable() { DataTable dt = new DataTable();//创建一个自己的类 dt.Columns.Add("user_id", typeof(string)); dt.Columns.Add("user_name", typeof(string)); DataRow row;//增加两条测试记录 row = dt.NewRow(); row["user_id"] = "001"; row["user_name"] = "csdn"; dt.Rows.Add(row); row = dt.NewRow(); row["user_id"] = "002"; row["user_name"] = "vjsdn"; dt.Rows.Add(row); return new MyDataTable(dt); } public void Test() { MyDataTable dt = CreateTestTable(); //注意这里(MyRows属性及FindRowByFieldValue方法)。调用自定义的方法! MyDataRow yes = dt.MyRows.FindRowByFieldValue("user_name", "csdn"); if (yes != null) MessageBox.Show(yes.Row["user_name"].ToString()); else MessageBox.Show("没找到!!!"); } /// <summary> /// 测试MyDataRow的方法和属性 /// </summary> public void Test1() { MyDataTable dt = CreateTestTable(); MessageBox.Show(dt.MyRows[0].GetUserFullName()); //读自定义方法 MessageBox.Show(dt.MyRows[1].UserFullName); //读自定义属性 } } }
参考文档:
C#.Net自定义控件 - GridPopupContainerEdit C#.Net自定义控件 - CheckedListBoxEditor(支持多值勾选及新增) C#.Net自定义控件 - GridPopupContainerLookup C#.Net自定义控件设置图标ToolboxBitmap的用法 C# 控件的属性是个类,如何给添加自定义属性 C#.Net用户自定义控件制作教程 C#开发自定义控件-设置显示工具箱中的图标 C#.Net开发继承UITypeEditor接口的自定义属性编辑器 C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象 标签:C#.Net组件开发 - 属性窗体内显示自定义名称 标签:C#.Net组件开发 - 自定义设计器持久化对象的属性 标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性 如何删除Toolbar的自定义按钮? 如审核|反审|根据按钮名称删除 【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit DevExpress GridControl组件的EmbeddedNavigator属性添加用户自定义按钮
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |