當DataGridview的資料源list的時候,對list進行操作後重新綁定,資料并不會更新
使用BindingList能很好的解決這個問題(framework2.0新增)
例如,使用list時候的代碼
/// <summary>
/// 性别類型維護
/// </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 方法實作新項的事務性送出或復原。