2016-10-15 4 views
1

Как сохранить правильный элемент ValueMember из ComboBox в сущности/db? Мои Winform имеет ComboBoxes, которые принимают значения от лиц о Tabel просмотра данных, как показано в следующем коде:Как сохранить правильный объект ValueMember из ComboBox в сущности/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(); 

    } 

На SaveChanges() Я получаю следующее сообщение об ошибке: «System.Data.Entity.Validation.DbEntityValidationException 'произошел в EntityFramework.dll

Чтобы узнать, что происходит, я добавил TextBox в форму и попытался сохранить в том, что я думал о ComboBox.ValueMember. Для этого я сохранил ComboBox.SelectedValue в переменной (ch) и сохранил эту переменную в TextBox.Text. То, что отображается в TextBox.Text, является DisplayMember Combo, а не ValueMember.

Чтобы проверить, почему, я добавил MessageBox в код, чтобы увидеть vaslue 'ch'; он показывает корреляционную ценность ValueMember.

Как может быть, что в MessageBox «ch» есть одно значение, а в TextBox.Text - другое?

Все, что я хотел, это извлечь список поиска из объектов LuData, показать варианты по имени в ComboBox и сохранить значение по коду в базе данных.

+0

напуган ваша форма есть «побочный эффект», может быть, ваши 'chargedToTextBox' есть обработчики событий, которые обновляют значение после того, как вы установите его в' ch'. И вам не нужно использовать 'this.Refresh', который просто перерисовывает всю форму. Вы только изменили значения уже существующих элементов управления, поэтому нет необходимости перерисовывать форму. – Fabio

+0

Спасибо Фабио за это. Refresh(). Вытащил это. Также использовалась строка ниже от Shadow. Без изменений. Будут дальнейшие исследования. – HES

+0

Можете ли вы проверить свою форму на наличие «chargeToTextBox»? возможно, вы делаете с ним привязку данных? Вы можете подписаться на его событие «TextChanged» и установить контрольную точку в обработчике событий, чтобы увидеть в стеке, который меняет текст в этой ситуации. –

ответ

0

Попробуйте это:

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

Спасибо за ваш быстрый ответ. Извините, не работает. «ChargToComboBox.SelectedItem.ToString()» по-прежнему содержит DisplayMember, а не ValueMember, который необходим. – HES