編寫Winform程序,遇到comboBox的綁定事件和索引項變更事件的沖突問題,就是“設置 DataSource 屬性後無法修改項集合”的錯誤問題,網上查了很多,大多說在索引項變更是進行非空判斷,還有個老兄自己加了個綁定成功狀態來輔助判斷,但是我照做了發現還 是不行,後來遇到一位老兄幫我解決了問題。
問題描述:
我想實現多個下拉列表聯動的功能,例如有三個下拉列表A、B、C,當選擇了下拉列表A中的數據後,下拉列表B中的數據發生相應的變化,選擇下拉 列表的B時下拉列表C的數據發生相應的變化。當然是采用ComboBox的DataSource屬性綁定數據啦。結果當我選擇下拉列表A的時候,系統拋出 異常“設置 DataSource 屬性後無法修改項集合”。
解決問題:
於是苦思冥想,上網查找資料,結果都沒有滿意的答案。最後還是查看幫助手冊,也沒有明確的答案。但是我從手冊上看到這樣一句話“實現 IList 接口的對象,如 DataSet 或 Array。”,請注意我標紅的那句話。靈感突現,再清除下拉列表項的時候首先將ComboBox.DataSource付空值“null”,問題果然就迎刃而解了。。
protected void BindArea(ComboBox combo_Area,int parentID)
{
{
combo_Area.DataSource = null;
combo_Area.Items.Clear();
}
DataRow[] dList = areaList.Select("ParentID = " + parentID.ToString());
if (dList.Length>0)
{
ArrayList da = new ArrayList();
foreach (DataRow dr in dList)
{
SysDic dic = new SysDic(dr);
da.Add(dic);
}
combo_Area.DisplayMember = "DicName";
combo_Area.ValueMember = "DicID";
combo_Area.DataSource = da;
}
}