关于ListBox控件的一个很逗的错误:“设置DataSource属性后无法修改项集合。”
刚刚在Coding这样一个场景:用户勾选了某个复选框之后,将一个相关的下拉框中的某些项Remove掉。代码很简单就不贴出来了。没想到调试时报了一个“设置DataSource属性后无法修改项集合。”的错误,Google一下,原来是因为该下拉框是通过指定DataSource属性绑定的:
cbBox.DataSource = list;
有人解释说,在winForm程序中,如果这样绑定,是不允许对ListBox的项进行删除操作的。原因是因为这样绑定之后是直接和数据源DataTable相关,改动项会对DataTable造成影响。而解决办法是
1、修改绑定方式,不要直接指定DataSource属性,而是把数据拿出来一个一个添加到ListBox上去,将ListBox和DataTable脱离关系。
2、先把DataTable的对应行删掉,然后acceptchanges()就好了。
我没有查找这个问题的根源,不知道这是不是官方的解释。如果是的话那就太逗了,建议微软给设计该错误的哥们颁发一个“最佳幽默奖”——你焉知我指定DataSource属性就一定绑定到DataTable呢?我动态构造一个IList绑定不行吖?再说了,就算绑定到DataTable,就这样不允许删除ListBox的项也不太好罢。