关于O/R中数据绑定功能的支持

要实现完整的数据绑定功能,工作量还是很大的。
(以下提供的类如未特别表明,均来自 System.ComponentModel
 
1、设计时,控件如何知道我的载体有多少字段?
.NET Framework通过对象 TypeDescriptor的GetProperties方法获取单个对象公开属性的列表,列表的项目类型是PropertyDescriptor,他和System.Reflection.PropertyInfo有些相近,用来描述你的属性是什么样的。
但注意的是,我们知道DataTable在MS设计好后,就固定那几个属性,问题是我们绑定的是其中的字段,而不是他的什么TableName属性,MS为什么可以搞特殊化呢?这里通过 ICustomTypeDescriptor接口实现的(是DataRowView实现的,具体原因下面再说),TypeDescriptor的GetProperties内部执行时,会检测你的对象是否支持ICustomTypeDescriptor,如果支持将作为优先输出结果。
备注:TypeDescriptor的GetProperties工作时,还会考虑是否是COM接口的。
 
2、我如何告诉表格我的集合中存储的明细类型?
我在绑定一个DataTable时,表格控件自动就知道有多少列,而我自定义的集合类,他如何知道明细的类型,以便决定显示多少列?
优先级最高的是你的集合支持 ITypedList,这个接口表明了你的集合明细的属性列表;
如果你的集合有个 强类型的 Item(C#叫this索引),这样也是可以的。
 
3、我的集合绑定到表格时编辑功能没有dataset的强大?
例如dataset绑定后可以排序等功能,而我的为什么不可以(可以也行),这个原因是你的集合是否完整支持 IBindingList,他定义了丰富的集合编辑特性;
另外让你的实体(非集合)支持 IEditableObject将可以在编辑改动取消掉。
 
4、DataSet可以设置一个错误信息,然后我的绑定控件后面就一个感叹号在闪烁,我如何能够做到?
这需要你的实体支持 IDataErrorInfo,以便获得此功能。
 
5、你说的那么多接口,但我没有看见DataTable、DataSet支持这些接口啊,你是不是讲错了?
你没有说错,我也没有完全说错,MS的做法讲绑定的实现从DataTable、DataSet和DataRow中移动到DataView、DataViewManager和DataRowView中,这样做到职能更加清晰。
他通过 IListSource来转移这种绑定,使控件实际绑定到这些View中。
 
-----------------------------------------------------
从codeproject上找来了一个可供学习用的example:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值