ComboBox(Forms) の DataSource を使用するときの注意点

ComboBox.DataSource にデータソースをバインドするときに DisplayMemer, ValueMemberを事前に設定しておかないと、 SelectedIndexChanged イベントをサブスクライブしていると痛い目を見ます。DisplayMember, ValueMember をセットする前に DataSource にバインドすると、 SelectedIndexChanged イベントが起動されて ComboBox.SelectedValue の値が想定した値(ValueMember) ではなく、 バインドしている現在選択されているオブジェクトそのものになってしまいます。当たり前のことですが。注意しましょう。
 
たとえば次の順番でバインドすると、 Dataource にバインドすると、SelectedIndexChanged が呼び出されてしまいます。
(ctrl は ComboBox のインスタンスです。)
 

ctrl.DataSource = dataSource

ctrl.DisplayMember = "Key"
ctrl.ValueMember = "Value"

 
なので、 下のように、DataSource にバインドする前に DisplayMember, ValueMember  を設定しておきましょう。
 
ctrl.DisplayMember = "Key"
ctrl.ValueMember = "Value"
ctrl.DataSource = dataSource
 
これなら SelectedIndexChanged イベントで現在選択されている値を ComboBox.SelectedValue で取得できます。
 

 

広告
カテゴリー: .NET パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中