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


     

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

    要实现完整的数据绑定功能,工作量还是很大的。

    (以下提供的类如未特别表明,均来自System.ComponentModel

     

    1、设计时,控件如何知道我的载体有多少字段?

    .NET Framework通过对象TypeDescriptorGetProperties方法获取单个对象公开属性的列表,列表的项目类型是PropertyDescriptor,他和System.Reflection.PropertyInfo有些相近,用来描述你的属性是什么样的。

    但注意的是,我们知道DataTableMS设计好后,就固定那几个属性,问题是我们绑定的是其中的字段,而不是他的什么TableName属性,MS为什么可以搞特殊化呢?这里通过ICustomTypeDescriptor接口实现的(是DataRowView实现的,具体原因下面再说),TypeDescriptorGetProperties内部执行时,会检测你的对象是否支持ICustomTypeDescriptor,如果支持将作为优先输出结果。

    备注:TypeDescriptorGetProperties工作时,还会考虑是否是COM接口的。

     

    2、我如何告诉表格我的集合中存储的明细类型?

    我在绑定一个DataTable时,表格控件自动就知道有多少列,而我自定义的集合类,他如何知道明细的类型,以便决定显示多少列?

    优先级最高的是你的集合支持ITypedList,这个接口表明了你的集合明细的属性列表;

    如果你的集合有个强类型的ItemC#this索引),这样也是可以的。

     

    3、我的集合绑定到表格时编辑功能没有dataset的强大?

    例如dataset绑定后可以排序等功能,而我的为什么不可以(可以也行),这个原因是你的集合是否完整支持IBindingList,他定义了丰富的集合编辑特性;

    另外让你的实体(非集合)支持IEditableObject将可以在编辑改动取消掉。

     

    4DataSet可以设置一个错误信息,然后我的绑定控件后面就一个感叹号在闪烁,我如何能够做到?

    这需要你的实体支持IDataErrorInfo,以便获得此功能。

     

    5、你说的那么多接口,但我没有看见DataTableDataSet支持这些接口啊,你是不是讲错了?

    你没有说错,我也没有完全说错,MS的做法讲绑定的实现从DataTableDataSetDataRow中移动到DataViewDataViewManagerDataRowView中,这样做到职能更加清晰。

    他通过IListSource来转移这种绑定,使控件实际绑定到这些View中。

     

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

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

  • 相关阅读:
    NET 中反射的用法
    Prism 框架解读之一系列
    委托(Delegate)
    Python NameError:name ‘xrange’ is not defined
    Python import commands ImportError: No module named 'commands'
    Python import commands ImportError: No module named 'commands'
    Python3 TypeError: initial_value must be str or None, not bytes
    Python3 TypeError: initial_value must be str or None, not bytes
    Python import urllib2 ImportError: No module named 'urllib2'
    Python import urllib2 ImportError: No module named 'urllib2'
  • 原文地址:https://www.cnblogs.com/tansm/p/186189.html
Copyright © 2020-2023  润新知