Winform中多個ComboBox聯動問題


本人在窗體中添加了一個FlowLayoutPanel控件flpControlContain,為了能讓控件自動排位(省了自己控制位置)代碼如下:
//在窗體中添加一個按鈕,每當該按鈕點擊一次,添加一個下拉框 
private void btnAddNew_Click(object sender, EventArgs e)
{
this.ConditonCount++;//是一個私有字段,用於記錄當前添加的是第幾個,每添加一個自增1
//添加列名下拉列表
ComboBox cmb = new ComboBox();
cmb.Name = "列"+ConditonCount;//設置控件名稱,用於在夫容器查詢到該控
cmb.Width = SELECTWIDTH;//設置寬度,該值是一個常量
cmb.DataSource = this._columnslist;//綁定了一個字符串集合作為數據源
cmb.Tag = ConditonCount;//設置標識,為第幾個
cmb.DropDownStyle = ComboBoxStyle.DropDownList;//設置下拉框下拉方式為只能選不能輸入
cmb.SelectedIndexChanged += Cmb_SelectedIndexChanged;//綁定列名下拉框選項修改事件,目前只在該事件中輸出控件的Tag
this.flpControlContain.Controls.Add(cmb);//添加到FlowLayoutPanel
}
當多個ComboBox添加到FlowLayoutPanel后,我這里綁定的下拉框數據源都是一樣的,就會出現當一個下拉框選中某一項之后,所有的下拉框都會去選中同一選項!但是下拉框選中項改變事件只觸發一次!!!!!!

 

於是弱弱的去貼吧問大神了~~得到的回答是:

-------------------------------------------------------------

cmb.DataSource = this._columnslist;
嘗試修改為
cmb.DataSource = this._columnslist.ToList() ;

----------------------------------------------------------

最后試了下,成功了!問題就來了,是不是和綁定的是同一個數據源就關系,於是自己新建了一個窗體,手動添加兩個ComboBox,但是給他們綁定的都是同一個List集合

實驗發現還是會聯動(選中ComboBox1中的一項,ComboBox2中也會選中同一項)!!!!!!

但是問題又來了:為什么綁定同一個數據源,會影響到控件的行為?可惜:貼吧大神沒有告訴我!!!

於是結論:多個控件綁定同一個數據源會影響到控件的行為(至少ComboBox會),於是建議數據源是List時使用List.ToList()方法,返回一個新的List,如果是DataTable就使用DataTable.copy()復制一個給它,以避免因為綁定的是同一個數據,而使某一個控件的行為會影響到綁定了同數據源的其他控件

 

 

 

 

在問題解決之后又開始無盡的百度,想知道為什么於是找到一篇神跡般的文章,地址貼上:http://www.360doc.com/content/12/0812/09/466494_229704176.shtml

學習了!膜拜大神


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM