![](https://csdnimg.cn/release/download_crawler_static/3319660/bg1.jpg)
解决 WinForm 设置 DataSource 属性后无法修改项集合
选自:http://xuzhihong1987.blog.163.com/blog/static/26731587201138114557123/
最近写了下 WinForm 程序,发现 ComboBox 控件使用 DataSource 设置数据源时,对其数据
集合进行清空操作【comboDST.Items.Clear()】,我使用了内置的 clear 方法,发现系统报“设
置 DataSource 属性后无法修改项集合”的错误,我百度了一下,发现该错误很常见,转贴的人
也很多,但是仔细一看大家转贴的几乎都是同样的内容,这里把据说原创地址链接一下:
http://blog.csdn.net/fuadam/archive/2008/05/24/2475912.aspx,大家可以参考一下。
简单的看了一下,发现似乎没必要做这么复杂,文章中作者提到了“在 winForm 程序中这
样绑定之后是直接和数据源 DataTable 相关,改动项会对 DataTable 造成影响”,进而在
此基础上提出创建类后对 DataSource 重新绑定,思路和做法似乎是没错的。但是我第一印
象就是应该没这么复杂,否则还不如当初自己构造 Item 集合类呢,用 DataSource 就是为了
方便,减去构造 Item 类的麻烦。
这里简单提一下思路吧,DataTable 是引用类型,那么如果改直接对 DataTable 进行操作,
不就相当于对 ComboBox 的 DataSource 修改吗?
//解决设置 DataSource 属性后无法修改项集合。
try
{
comboDST.Items.Clear();
}
catch (System.Exception ex)
{
DataTable dt = (DataTable)comboDST.DataSource;
dt.Rows.Clear();
}
这样就达到我们要清空的效果了,当然如果要新增/修改/删除某项也很简单嘛,比如说新增吧:
DataRow dr = dt.NewRow();
dr["DSTNAME"] = "xuzhihong";
dt.Rows.Add(dr);
这样其实就增加了一项,是不是很方便呢?当然ComboBox是这样,那么
ListBox,CheckBoxList如果碰到这样的问题也同样能解决吧!
飞天心宏 2011-04-08