我有一个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未设置的条件是什么?
答案 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将触发事件触发器,然后返回到代码块。