C#
定石2: DisplayMember / ValueMemberの設定順序の罠
出典: WinForms ComboBox の DataSource バインディングと SelectedIndex / SelectedValue / SelectedItem の違い — 定石2: DisplayMember / ValueMemberの設定順序の罠
// ❌ NG: DataSourceを先に設定するとDisplayMemberが効かないケース
combo.DataSource = dt; // ←この時点で表示が"DataRowView"のToString()で固まる
combo.DisplayMember = "name"; // ←後から設定しても効かないor微妙な挙動
combo.ValueMember = "id";
// ✅ OK: DisplayMember → ValueMember → DataSourceの順
combo.DisplayMember = "name";
combo.ValueMember = "id";
combo.DataSource = dt; // ←最後にセット、Display/Value両方とも正しく適用
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「定石2: DisplayMember / ValueMemberの設定順序の罠」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅定石1-a: DataTableをバインド(業務SE最頻) DataTable dt = LoadCustomerMaster(); // DataAdapterで取得済み combo.DisplayMember = "name"; //画面に出すカラム combo.ValueMember = "id"; //内部で扱うカラム未収録
定石1: DataSourceバインディング基本(DataTable / List /配列の3パターン)
#1175baf9dd62
// ✅定石3: Selected3兄弟の使い分け private void btnSubmit_Click(object sender, EventArgs e) { // 1. SelectedIndex:選択行番号(int、未選択は-1)未収録
定石3: Selected3兄弟(Index / Value / Item)の使い分け
#d784d45bf247
// ❌ NG: DataSource切り替え時に二重発火、本番更新が2回走る private void combo_SelectedIndexChanged(object sender, EventArgs e) { int customerId = (int)combo.SelectedValue;未収録
定石4: SelectedIndexChanged二重発火の回避
#be8898e7aa37
// ✅定石5: DataSource切替で選択状態を保持する3ステップ private void RefreshCombo(DataTable newDt) { // 1.現在のSelectedValueを保存未収録
定石5: DataSource切替時の選択状態保持パターン
#ed209c382877
