DisplayMember并不总是在CheckedListBox中设置

时间:2012-07-29 08:24:56

标签: c# visual-studio-2010 checkedlistbox

我有一个CheckedListBox,我填充了一个自定义“DBitemtype”对象列表,我首先设置DataSource,然后是CheckedListBox“clbItemType”的DisplayMember和ValueMember属性。现在,在运行时,用户可以选择更改项目,因此我有一个事件,通过首先将DataSource设置为null,然后将DataSource设置为新列表,使用相同“DBitemtype”对象的不同列表重新绑定CheckedListBox,然后再将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未设置的条件是什么?

2 个答案:

答案 0 :(得分:2)

我不确定这是否有帮助,但我确实发现DisplayName不喜欢公共字段(public int x;),只有公共属性(public int x { get; set; };)。

因此,我会尝试确保ItemName或任何其他可能的DisplayName值实际上是DBitemtype的公共属性。

答案 1 :(得分:0)

看起来可能相同,但是:

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.DisplayMember = DBitemtype.Columns.ItemName;  // String constant - value "ItemName"
clbItemType.ValueMember = DBitemtype.Columns.ID;          // String constant - value "ID"
clbItemType.DataSource = _SelectedItemTypes;  // A List<DBitemtype>

首先设置您的成员,然后更改您的DataSource。更改DataSource将触发事件触发器,然后返回到代码块。