Как сохранить правильный элемент 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 и сохранить значение по коду в базе данных.
напуган ваша форма есть «побочный эффект», может быть, ваши 'chargedToTextBox' есть обработчики событий, которые обновляют значение после того, как вы установите его в' ch'. И вам не нужно использовать 'this.Refresh', который просто перерисовывает всю форму. Вы только изменили значения уже существующих элементов управления, поэтому нет необходимости перерисовывать форму. – Fabio
Спасибо Фабио за это. Refresh(). Вытащил это. Также использовалась строка ниже от Shadow. Без изменений. Будут дальнейшие исследования. – HES
Можете ли вы проверить свою форму на наличие «chargeToTextBox»? возможно, вы делаете с ним привязку данных? Вы можете подписаться на его событие «TextChanged» и установить контрольную точку в обработчике событий, чтобы увидеть в стеке, который меняет текст в этой ситуации. –