编写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;
            }
        }

ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决【转】的更多相关文章

  1. C#ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决方法

    在使用ComboBox控件时,遇到了重新绑定赋值出问题的情况.正常情况下,对于数据重新赋值的或者绑定数据源的时候,为了防止数据出现问题,都会先清空原来数据,所以就这样写了,但是没有相当恰恰这样写就出现 ...

  2. C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...

  3. 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合” 最近更新: 2013-2-15    587   很少写WinForm程序第一次使用ListBox控件就遇到了比 ...

  4. C#.Net ComboBox控件设置DropDownList之后背景颜色问题,以及发现的微软的一个BUG

    先说背景颜色问题怎么处理. C#.Net WinForm中如果设置ComboBox的DropDownStyle为DropDownList,控件背景色会变成灰色,并且这个时候ComboBox控件的Bac ...

  5. .NET中TextBox控件设置ReadOnly=true后台取不到值的解决方法

    在.NET 2.0 下,当页面上的某个TextBox 设置了属性ReadOnly="True"时,通过客户端脚本给其赋值后,在后台代码中访问其Text属性却无法获得该值.经过尝试, ...

  6. Android 动态的给Button、TextView、ImageView等控件设置了background后,再设置padding属性时该属性不起作用

    也许大家遇到这样一个问题,有时我们根据业务需要在一个ViewGroup中动态的(程序运行过程中)添加View.例如添加Button,就需要给Button添加background.padding.mar ...

  7. 将数据表中的数据添加到ComboBox控件中

    实现效果: 知识运用: ComboBox控件的DataSource 属性 //获取或设置ComboBox的数据源 public Object DataResouce{get;set;} //属性值:任 ...

  8. 解决HTML select控件 设置属性 disabled 后无法向后台传值的方法

    大家都知道有时候修改数据的时候我们希望有一些数据是不可以修改的,通常情况下我们会将input框设置为 readonly , 但是 select 控件没有这个属性,需要使用另一个属性 disabled ...

  9. C#中combobox 控件属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

随机推荐

  1. java 资料必备

    学习java个人以为必备的资料很多,边上课,边总结: 1.jdk API这个是必须的,什么资料都没有这个权威 2. javaJAVA 2核心技术7th 3. BJava就业培训教程张孝祥 4. thi ...

  2. 【246】◀▶IEW-Unit11

    Unit 11 Transport 1. Model1题目分析 Some countries attempt to solve the problem of traffic congestion by ...

  3. eclipse修改workspace

    Eclipse是一款很强的Java IDE,我们在开始的时候,往往设定了默认的workspace,当用久在之后,我们可能要去更改一下workspace的位置,但是在启动的时候已经不会显示更改了.下面有 ...

  4. day4 函数重载

    函数的重载 1.函数重载的定义:在同一个类中,有一个以上的同名函数,只要函数的参数列表或参数类型不一样即可,与返回值无关, 这些统称为方法的重载. 2.函数的重载存在的原因:为了增强方法的阅读性,优化 ...

  5. Updatepanel 中使用 Timer 控件 失去焦点问题

    在Update Panel 中 如果使用timer 定时刷新数据,会造成textbox 或者其他控件的焦点丢失问题. 所以 text box 不能和timer 放在同一个Updatepanel 中. ...

  6. SharePoint 2013 set site mailbox

    Automating Site Mailboxes in SharePoint 2013 and Exchange 2013 One of the completely new features to ...

  7. append、replace、replaceAll、indexof、lastIndexOf、substring的用法

    1.append StringBuffer buf = new StringBuffer("Hard "): String  aString  =  "Waxworks& ...

  8. oracle view and MATERIALIZED VIEW

    View http://blog.csdn.net/tianlesoftware/article/details/5530618 MATERIALIZED VIEW http://blog.csdn. ...

  9. JS高级学习历程-8

    2 构造函数和普通函数的区别 两者本身没有实质区别,具体看使用 new  函数();   -------->构造函数 函数();        ---------> 普通函数 <!D ...

  10. c# Array或List有个很实用的ForEach方法,可以直接传入一个方法对集合中元素操作

    using System; using System.Collections.Generic; namespace demo { class Program { static void Main(st ...