本人在窗體中添加了一個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
學習了!膜拜大神