2016-10-15 11 views
1

ComboBoxの正しいValueMemberをエンティティ/ dbに保存するにはどうすればよいですか? 私のWinフォームは、次のコードのように、ルックアップデータtabelのエンティティから値を取るコンボボックスがありますSaveChangesメソッドでComboBoxの正しいValueMemberをエンティティ/ dbに保存するにはどうすればよいですか?

private void FillComboBoxes() 
    { 
     chargedToComboBox.Invalidate(); 
     ModelCS ctx = new ModelCS(); 
     var query1 = from a in ctx.LuDatas 
        where a.Category == "Charged To" && a.IsActive == true 
        select new { LuValueMember = a.LuValueMember, 
            LuDisplayMember = a.LuDisplayMember }; 

     var chargedTo = query1.ToList(); 
     chargedToComboBox.DataSource = chargedTo; 
     chargedToComboBox.DisplayMember = "LuDisplayMember"; 
     chargedToComboBox.ValueMember = "LuValueMember";  

     string ch = chargedToComboBox.SelectedValue.ToString(); 
     MessageBox.Show(ch);  // variable ch shows the CORRECT 
            // ValueMember 
     chargedToTextBox.Text = ch;  // variable ch show the UNDESIRABLE     
             // DisplayMember 
     this.Refresh(); 

    } 

()Iを取得、次のエラー: 「System.Data.Entity.Validation.DbEntityValidationException 'がEntityFramework.dllで発生しました

何が起きているかを知るために、私はTextBoxをフォームに追加し、ComboBox.ValueMemberと思ったものを保存しようとしました。これを行うには、変数(ch)にComboBox.SelectedValueを格納し、この変数をTextBox.Textに格納しました。 TextBox.Textに表示されるものは、ValueMemberではなくComboのDisplayMemberです。

なぜ、私は 'ch'のvaslueを見るためにコードにMessageBoxを追加しました。 ValueMemberの相当値を示します。

どのようにMessageBox 'ch'に1つの値があり、TextBox.Textに別の値があるのでしょうか?

私が望んだのは、LuDataエンティティからルックアップリストを抽出し、その選択肢をComboBoxに名前で表示し、その値をデータベースにコードで保存することでした。

+0

は、いくつかの「副作用」を持っているかもしれない、あなたの 'chargedToTextBox'はあなたがch''にそれを設定した後、更新値、いくつかのイベントハンドラを持つフォームをAffraid。また、フォーム全体を再描画するだけの 'this.Refresh'を使う必要はありません。既に存在するコントロールの値を変更しただけなので、フォームを再描画する必要はありません – Fabio

+0

this.Refresh()に対してFabioに感謝します。それを取り出した。 Shadowの下の行も使用しました。変化なし。もっと研究します。 – HES

+0

'chargedToTextBox'の出現をフォーム全体で確認できますか?多分あなたはそれでいくつかのデータバインディングをしていますか? 'TextChanged'イベントを購読してイベントハンドラにブレークポイントを設定すると、スタックトレースに誰の状況でテキストが変更されているかがわかります。 –

答えて

0

これを試してみてください:

chargedToTextBox.Text = chargedToComboBox.SelectedItem.ToString(); 
+0

あなたの迅速な対応に感謝します。申し訳ありませんが動作しませんでした。 "chargedToComboBox.SelectedItem.ToString()"には、DisplayMemberが保持され、必要なValueMemberは保持されません。 – HES

関連する問題