C# DataGridView綁定List對象時,利用BindingList來實現增刪查改

     當DataGridView的DataSource是DataTable的時候,DataTable的數據改變時,DataGridView的數據會隨之改變,無需從新綁定到DataGridView。  當DataGridView的DataSource是泛型List,當List的數據改變時,則須要先將DataGridView的DataSource設置爲new List<T>(),再將改變後的List<T>賦給DataGridView的DataSource。綁定List時,注意:切莫將DataGridView的DataSource設置爲Null,不然會破壞DataGridView的列結構。this

     若是要對綁定在DataGridView中的List<T>進行數據的添加刪除,先要把List<T>轉換成BindingList<T>,再進行綁定:DataGridView.DataSource=new BindingList<T>(new List<T>)。不然的話會產生許多意想不到的錯誤。 如:初始綁定空數據後再添加數據綁定後,卻取不到DataGridView.CurrentCell屬性。component

  IList<T> list= new List<T>();server

  DataGridView.DataSource=list;//DataGridView的行不能添加刪除it

  DataGridView.DataSource=new BindingList<T>(list);//DataGridView的行能夠添加刪除(只有容許添加行、刪除行)io

示例代碼:class

public partial class ucServer : UserControl
     {
         private List<ServerInfo> serverList;
         private BindingList<ServerInfo> dataBindings;泛型

        public ucServer(List<ServerInfo> serverList)
         {
             InitializeComponent();
             if (serverList == null)
                 serverList = new List<ServerInfo>();
             this.serverList = serverList;
             dataBindings = new BindingList<ServerInfo>(this.serverList);
         }object

        private void ucChecker_Load(object sender, EventArgs e)
         {
             this.dgParams.DataSource = dataBindings;
         }foreach

        private void llDownloadUrl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
             MessageBox.Show("請設置下載地址。");
         }List

        private void llHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
             MessageBox.Show("請設置幫助信息。");
         }

        public bool IsValid()
         {
             return true;//CheckService.Check(this.component);
         }

        private void btnAdd_Click(object sender, EventArgs e)
         {
             ServerInfo info = new ServerInfo() {  OSType="Windows", Ports="8000-9999"};

            dataBindings.Add(info);
         }

        private void btnDel_Click(object sender, EventArgs e)
         {
             //容許刪除多行

            DataGridViewSelectedRowCollection rows = this.dgParams.SelectedRows;

            foreach (DataGridViewRow row in rows)
             {
                 this.dataBindings.RemoveAt(row.Index);
             }
         }

    }

相關文章
相關標籤/搜索