1

最初に DataSource を設定し、次に DisplayMember、および CheckedListBox "clbItemType" の ValueMember プロパティを設定することによって行う、カスタム "DBitemtype" オブジェクトのリストを設定する CheckedListBox があります。実行時に、ユーザーはアイテムを変更するオプションを持っているので、最初に 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プロパティ

だから私はこれが2部構成の質問だと思います:

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 を変更します。DataSource を変更すると、イベント トリガーが発生し、コード ブロックに戻ります。

于 2012-08-04T16:59:09.543 に答える