2011-04-09 54 views

回答

6

为了解释List<T>DataTable工作(问题的脚注)如何,请阅读以下但指出的是:

  • List<T>实现IList和具有被用于解析元数据的public T this[int index] {get;}
  • DataTable implements IListSource,它提供了表的默认值DataView;所述DataView实现IList,并实现ITypedList提供元数据

类别结合按以下顺序:

  • 源极被用于测试IListSource;如果有的话IList是通过GetList()获得
  • 否则源测试IList;如果不可用,则抛出异常

然后为IList元数据被查询:

  • IListITypedList测试;如果找到,Foo被暗示作为经由TypeDescriptor.GetProperties(Type)
  • 其他的第一项(获得的类型和元数据 - 如果可用的话,这是通过GetProperties
  • IList为公共类型化(非对象物)索引测试,即public Foo this[int index] { get; }使用如果非空)经由GetType()中查询的类型,并通过TypeDescriptor.GetProperties(Type)

我们现在可以访问的项目(IList)和它们的元数据获得的元数据;通过IBindingList(提供双向绑定和基本分类等),IBindingListView(提供高级分类,过滤等),ICancelAddNewIRaiseItemChangedEvents提供额外支持(可选)。

对于大多数常见情况(显示数据和推回变化)List<T>是好的;如果你需要显示不相关的更新,因为它们发生BindingList<T>帮助 - 但请注意,以支持成员级更新(而不是仅仅添加/删除/等)的T必须实现INotifyPropertyChanged

作为参考,“元数据”在这里指的是“一套PropertyDescriptor”(每列/财产1),它提供对底层数据的访问(当提供object时)以及有关成员本身(名称,类型等)的信息。

0

大多数控件可以绑定到IList接口。

http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspx

+0

不直接回答这个问题,因为'DataTable'没有实现'IList' – 2011-04-09 12:40:44

+0

@Marc - 感谢,是它更好地使用IListSource作为,而不是一个IList该采取控制一个数据源? – WraithNath 2011-04-09 12:43:09

+2

都不;最好使用'object'和* test *是否它是'IListSource'(否则使用它),否则*测试*它是否是'IList' - 或者只是将该逻辑交给使用' BindingSource' – 2011-04-09 12:46:13

0
+1

在问题的上下文中,请注意'List '*不会*实现'IBindingList' – 2011-04-09 12:40:04

相关问题