ComboBox控件“設置 DataSource 屬性后無法修改項集合”的解決【轉】


      編寫Winform程序,遇到comboBox的綁定事件和索引項變更事件的沖突問題,就是“設置 DataSource 屬性后無法修改項集合”的錯誤問題,網上查了很多,大多說在索引項變更是進行非空判斷,還有個老兄自己加了個綁定成功狀態來輔助判斷,但是我照做了發現還 是不行,后來遇到一位老兄幫我解決了問題。

問題描述:

  我想實現多個下拉列表聯動的功能,例如有三個下拉列表A、B、C,當選擇了下拉列表A中的數據后,下拉列表B中的數據發生相應的變化,選擇下拉 列表的B時下拉列表C的數據發生相應的變化。當然是采用ComboBox的DataSource屬性綁定數據啦。結果當我選擇下拉列表A的時候,系統拋出 異常“設置 DataSource 屬性后無法修改項集合”。

  解決問題:

  於是苦思冥想,上網查找資料,結果都沒有滿意的答案。最后還是查看幫助手冊,也沒有明確的答案。但是我從手冊上看到這樣一句話“實現 IList 接口的對象,如 DataSet 或 Array。默認為空引用(在 Visual Basic 中為 Nothing)。 ”,請注意我標紅的那句話。靈感突現,再清除下拉列表項的時候首先將ComboBox.DataSource付空值“null”,問題果然就迎刃而解了。紅色字體中數據源付空值一定要在清除項目之前進行

代碼實例如下:

 protected void BindArea(ComboBox combo_Area,int parentID)
        {
            if (combo_Area.Items.Count > 0)
            {
                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;
            }
        }


免責聲明!

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



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