• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
编写人生
写写代码,写写人生
博客园    首页    新随笔    联系   管理    订阅  订阅
关于O/R中数据绑定功能的支持
 

关于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中。

 

以上仅是简单介绍,具体还很复杂。

目前我所看见的绝大多数OR设计没有考虑绑定机制。

posted on 2005-07-04 18:15  编写人生  阅读(1561)  评论(2)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3