程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 使用BindingList來實現DataGridview數據源為list時的動態增刪改

使用BindingList來實現DataGridview數據源為list時的動態增刪改

編輯:C#基礎知識

當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 方法實現新項的事務性提交或回滾。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved