【发布时间】:2012-07-27 07:30:24
【问题描述】:
我有一个 CheckedListBox,我使用自定义“DBitemtype”对象列表填充,我首先设置 DataSource,然后设置 CheckedListBox“clbItemType”的 DisplayMember 和 ValueMember 属性。现在在运行时,用户可以选择更改项目,所以我有一个事件,通过首先将 DataSource 设置为 null,然后将 DataSource 设置为新列表,将 CheckedListBox 与相同“DBitemtype”对象的不同列表重新绑定,然后将 DisplayMember 和 ValueMember 属性再次设置为完全相同的值,如下所示:
clbItemType.DataSource = null;
clbItemType.DataSource = _SelectedItemTypes; // A List<DBitemtype>
clbItemType.DisplayMember = DBitemtype.Columns.ItemName; // String constant - value "ItemName"
clbItemType.ValueMember = DBitemtype.Columns.ID; // String constant - value "ID"
clbItemType.Refresh();
用于 DisplayMember 和 ValueMember 的字符串常量都描述了 DBitemtype 类中的公共字符串属性。
我遇到的问题是,有时 DisplayMember 会设置为“ItemName”,有时它不会设置为“”,当我单步执行代码时它会保持为“”。我似乎无法找到一种模式来解释为什么它只偶尔发生。没有错误或异常被抛出。
我能找到的是“如果无法设置 DisplayMember 的新值,则保留以前的值。”来自这里的msdn文章CheckedListBox.DisplayMember Property
所以我猜这是一个两部分的问题:
1) 有其他人遇到过这个问题吗?
2) 哪些条件会导致 DisplayMember 无法设置?
【问题讨论】:
-
当您尝试键入“DisplayMember”时,您是否注意到 IntelliSense 不太配合?查看 CheckedListBox.DisplayMember 的 MSDN 文章并阅读“注意”:
You cannot bind data to a CheckedListBox -
@HansPassant 是的,我注意到 IntelliSense 不合作。但是,这些属性确实存在,如果您阅读 MSDN 文章 CheckedListBox.DisplayMember for .NET Framework 4.0 或 3.5(不是 3.0 或更早版本),您所指的注释不存在。
标签: c# visual-studio-2010 checkedlistbox