[c#基礎]-BindingList

BindingList的主要特點在於,它可以在加入新的元素或者元素髮生修改的時候觸發相應的事件,而在基本集合類中是不具有這些功能的,而且由於在基本集合中Add方法不是Virtual方法,要想讓它觸發事件還真不是很方便。不過BindingList可以很好的滿足你的功能。

    在Windows表單編程中,使用DataGridView可以很方便與數據庫查詢結果綁定,但是有時候查出來的數據需要經過一番處理才顯示,這時候就不能直接綁定了。藉助於BindingList,你便可以很方便得實現這個功能。
     BindingList是一個泛型容器,可以直接賦值給DataGridView的DataSource。而且以後的數據變化,只需要維護BindingList裏的東西就行了,DataGridView自動更新數據顯示。

最近做項目中突然發現還有個BindingList可以使用。查了不少信息。得出底下幾點結論:

壓根不是同一樣東西,從命名空間中就能發現,一個是Component下的東西。主要特點在於Component的相關。另一個是Collection命名空間下的產物。主要用於集合相關。 
BindingList比List多的功能問爲但他是GridView的數據源時,他有Allow....  Sort...等方法。從名字中可以看出對於該數據的一些約束。List比BindingList多的方法比如,AddRange方法,我之前項目中使用BindingList時需要將2個BindingList合併,卻找不到方法。當然他可能有其他的方法而我不知道而已。 
最後,BindingList和List並無任何關係不存在繼承關係。個人建議,處理邏輯時用List,但作爲數據源綁定是用BindingList.

 

使用BindingList綁定datagridview開發應用,只要如下即可:  

 BindingList<T> x = new BindingList<T>();

     ....   datagridivew1.datasource = x;  

datagridiew1.columns["name'].DataPropertyName = "Name"; 

    ...    T = datagridview1.selectedrows[0].boundItem as T;  

 

列表控件的信息就可以和對象集合的信息“同步”,但經過檢查發現,這個同步是單向的,列表控件數據變更或增加,可以通過事件通知到對象集合,而對象集合內的數據變更或增減列表控件無法變更,(後來試驗了一下,有時需要對datagridview進行刷新纔會更新,但對象增減應該可以同步)而且我在檢查其代碼時發現瞭如下有趣現象: 

 1. 如果列表控件使用了cellvalidating事件,在出現e.cancel=true時, 系統會經常報錯,估計是後面的對象清單取消操作時的問題

  2 . BindingList本身不具備排序功能,如果重寫applysort方法,需要處理一堆問題.

所以簡單的操作用bindinglist很方便,如果是複雜操作,可能就有問題。

 

https://www.cnblogs.com/louisding/archive/2011/01/18/2763702.html

https://blog.csdn.net/cxu123321/article/details/94986853

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章