1

我有一个 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 属性

所以我想这是一个两部分的问题:

1)其他人有这个问题吗?

2) 哪些条件会导致 DisplayMember 无法设置?

4

2 回答 2

2

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

因此,我会尝试确保ItemName或任何其他潜在的 DisplayName 值实际上是DBitemtype.

于 2013-02-01T21:34:51.333 回答
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 将触发事件触发器,然后返回代码块。

于 2012-08-04T16:59:09.543 回答