2011-04-09 68 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