手动动态添加 PropertyGrid 的数据行并显示 C# (非属性绑定方式)
在C#编程中,`PropertyGrid`控件通常用于显示对象的属性,并允许用户进行交互式编辑。在一些特殊情况下,我们可能需要手动动态地添加数据行到`PropertyGrid`而不是通过属性绑定来实现。本篇文章将深入探讨如何在不依赖属性绑定的情况下,通过代码直接控制`PropertyGrid`的显示内容。 ### 1. `PropertyGrid`概述 `PropertyGrid`控件是.NET Framework提供的一种方便的数据对象属性编辑工具。它能够自动发现对象的公共属性、方法和事件,并以网格的形式展示出来,用户可以通过这个界面进行直观的编辑。 ### 2. 动态创建`PropertyDescriptor` 要手动向`PropertyGrid`添加数据行,首先我们需要创建`PropertyDescriptor`实例。`PropertyDescriptor`是`System.ComponentModel`命名空间中的类,它代表了对象的一个属性,并提供了读取和写入属性值的方法。 ```csharp PropertyDescriptor descriptor = new CustomPropertyDescriptor("MyProperty", typeof(string), null); ``` 这里,`CustomPropertyDescriptor`是自定义的`PropertyDescriptor`子类,用于处理自定义属性的行为。`MyProperty`是你要添加的属性名,`typeof(string)`表示属性类型,`null`为默认的事件处理方法。 ### 3. 创建`TypeDescriptor` `TypeDescriptor`是`System.ComponentModel`命名空间中的另一个关键类,它可以动态扩展类型信息。为了向`PropertyGrid`添加自定义属性,我们需要创建一个`TypeDescriptor`的实例,并添加`PropertyDescriptor`到其中。 ```csharp TypeDescriptor.AddProperties(myObject, new PropertyDescriptor[] { descriptor }); ``` 这里的`myObject`是你要显示的自定义对象。 ### 4. 显示`PropertyGrid` 创建好`PropertyDescriptor`和`TypeDescriptor`后,可以将`PropertyGrid`的`DataSource`设置为自定义对象,然后`PropertyGrid`会根据`TypeDescriptor`中的信息显示属性。 ```csharp propertyGrid1.DataSource = myObject; ``` ### 5. 自定义`PropertyDescriptor`行为 如果需要自定义属性的显示或编辑行为,可以在`CustomPropertyDescriptor`中重写相关方法,如`GetValue`、`SetValue`、`ShouldSerializeValue`等。 ```csharp public class CustomPropertyDescriptor : PropertyDescriptor { public CustomPropertyDescriptor(string name, Type type, params Attribute[] attributes) : base(name, attributes) { // 初始化... } public override object GetValue(object component) { // 返回属性值 } public override void SetValue(object component, object value) { // 设置属性值 } // 其他需要重写的方法... } ``` ### 6. 多个动态属性 如果你需要添加多个属性,只需创建多个`PropertyDescriptor`实例并将其添加到`TypeDescriptor`即可。注意,每次添加新的属性时,都应确保之前添加的属性仍然可见。 ### 7. 清除动态属性 在不再需要动态属性时,可以通过`TypeDescriptor.RemoveProperties`方法移除它们,以防止内存泄漏。 ```csharp TypeDescriptor.RemoveProperties(myObject, new PropertyDescriptor[] { descriptor }); ``` 总结来说,通过手动创建和管理`PropertyDescriptor`及`TypeDescriptor`,我们可以灵活地在`PropertyGrid`中动态添加和控制数据行,实现非属性绑定的显示方式。这种方式在需要自定义属性编辑或者处理非标准数据类型时特别有用。不过,要注意这会增加代码的复杂性,因此在能够使用属性绑定的情况下,首选仍然是属性绑定。
- 1
- huanyi002019-07-09符合描述 基本能用
- 粉丝: 36
- 资源: 91
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 多微网优化模型matlab 采用粒子群算法分析两个微网的优化调度,得到蓄电池,发电机以及微网间功率传输,程序有参考资料
- 潮流计算程序matlab 牛拉法 采用matlab对9节点进行潮流计算,采用牛拉法,程序运行可靠
- 微网优化调度matlab 采用matlab+yalmip编制含分布式和储能的微网优化模型,程序采用15分钟为采集节点,利用cplex求解,程序考虑发电机的启停约束,程序运行可靠
- PMSM永磁同步电机仿真三电平SVPWM矢量控制matlab PMSM双环矢量控制传统三电平
- 路径规划人工势场法以及改进人工势场法matlab代码,包含了
- MobaXterm 是一款功能强大且实用的终端仿真器软件.docx
- 三菱FX3U底层源码,PLSR源码 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,支持脉冲输出与定位指令(包括PLSY PWM PLSR PLSV DRVI DRVA 等指令
- Oracle Database Gateways for Win32-11gR2
- python071基于RSA加密算法软件的研究设计
- 成熟量产低压无刷伺服驱动 方案 全套软硬件资料 源码 原理图 需要的直接拿 基于28035平台
- 欧姆龙PLC ST语言6轴伺服RS232C通讯板CP1W-C IF0 真实项目程序,ST语言写的FB块 PLC用是两台CP1H-X40DT-D配置4块RS232C通讯板CP1W-CIF01 触摸屏是N
- 欧姆龙CP1H与力士乐VFC-x610变频器通讯程序功能:原创程序,可直接用于现场程序 欧姆龙CP1H的CIF11通讯板,实现对力士乐VFC-x610变频器 设定频率,控制正反转,读取实际频率,读取
- 级联型电力电子变压器,高压直流MMC控制系统,级联数可选,调 制方式有移相载波,nlm及混合调制,拥有冒泡排序,递归排序等方法,可控制三相不平衡与环流
- 西门子PLC双轴定位算法电池焊接控制程序-S7-1200 +威纶通触摸屏 S7-1200PLC做的电池焊接程序,电池包里面有n*m行列个电池 程序设计灵活SCL语言+梯形图,采用了位置试教与定位路径规
- 变压器副边突然短路simulink仿真
- MATLAB代码:基于模型预测控制的楼宇负荷需求响应研究 关键词:楼宇负荷 空调 模型预测控制 需求响应 仿真平台:MATLAB+CVX平台 主要内容:代码主要做的是一个建筑楼宇的需求响应问题,首