當DataGridview的數據源list的時候,對list進行操作後重新綁定,數據並不會更新
使用BindingList能很好的解決這個問題(framework2.0新增)
例如,使用list時候的代碼
/// <summary> /// 性別類型維護 hovertree.com /// </summary> public partial class SexFrm : Form { IList<SystemCode> list; private void BindData() { list =new SystemCodeManager().GetModelByType(type); dgvSexType.DataSource = list; } private void btnAdd_Click(object sender, EventArgs e) { SystemCode sys = new SystemCode(); sys.CodeNo = ""; sys.EnglishName = ""; sys.ID = 12312; sys.Name = ""; sys.QuickSign = ""; sys.Remark = ""; sys.Type = type; list.Add(sys); } }
這樣的情況下,數據源改變,實際顯示數據並沒有改變
即時你在add的方法裡重新綁定數據源
dgvSexType.DataSource = list;
依然如此.
在此,使用BindingList就可以很好的解決這個問題了.
/// <summary> /// 性別類型維護 /// </summary> public partial class SexFrm : Form { int type = 2; SystemCodeManager sysManager = new SystemCodeManager(); BindingList<SystemCode> list; private void SexFrm_Load(object sender, EventArgs e) { new BaseCode.LanguageSeting().LoadLanuageSettings(this); BindData(); } private void BindData() { list = new BindingList<SystemCode>(new SystemCodeManager().GetModelByType(type)); dgvSexType.DataSource = list; } private void btnAdd_Click(object sender, EventArgs e) { SystemCode sys = new SystemCode(); sys.CodeNo = ""; sys.EnglishName = ""; sys.ID = 12312; sys.Name = ""; sys.QuickSign = ""; sys.Remark = ""; sys.Type = type;
list.Add(sys);
}
}
這樣子,就可以輕松的實現和DataGridview互動了
效果如圖
點擊新增後可以直接新增,如果使用list,就沒有任何反應
注意:BindList需要引用System.ComponentModel命名空間
面向對象中集合類一般都會實現接口IbindingList, 因為 ,在綁定數據源的時候,如果數據源實現了IbindingList 那麼界面可以與之實行互動。無意中發現了微軟在2.0增加了一個新類,BindingList<T>,這個類從Collection<T>斷承,並實現了IbindingList.
IbindingList 的魅力之處就在於他有AddNew,ApplySort,ListChangedEventHandler 等方法。而BindingSource 是控件的數據源和真正的數據源之間的橋梁,它可以調用IbindingList 的數AddNew等方法。同時IbindingList有數據發生改變的時候又會通知BindingSource從而更新界面。
MS 的 BindingList<T>還不支持sort ,search.,這是因為不知T為何東東有關系,要想實現些功能只有自己擴展了。BindingList<T>有點遺憾的是沒有記下刪除的數據,這與功能強大的表還是無法相比。從面向對象都已經到面向方面了,怎麼在基礎類中對面向對象支持還是不太完美呢。現在在研究,對象實體,集合,歡迎各位大師前來指教。
下面是MSDN上對BindingListr 的說明,代碼示例演示如何綁定到一個包含業務對象的 BindingList 組件。
http://msdn2.microsoft.com/zh-cn/library/ms132679.aspx#Mtps_DropDownFilterTextBindingList 類可以用作創建雙向數據綁定機制的基類。BindingList 提供IBindingList 接口的具體泛型實現。這樣就不必實現完整的 IBindingList 接口,實現完整接口可能會因 IBindingList、IEditableObject 和關聯的 CurrencyManager 之間微妙的交互而變得比較困難。不過,典型的解決方案程序員將使用提供數據綁定功能的類(如 BindingSource),而不是直接使用 BindingList。
BindingList 通過可擴展的 AddNew 方法支持工廠創建的實例。(在 BindingSource 等其他類中也存在這種類型的擴展性)此外,由於此類實現 ICancelAddNew 接口,因此它通過 EndNew 和 CancelNew 方法實現新項的事務性提交或回滾。