C# Windows Forms Событие SelectionChangeCommitted ComboBox предотвращает изменение выделения, когда в нем изменяется свойство BindingSource Combobox.

Использование объектов C# Entity Framework, как показано ниже 2

вещь:

  • имя элемента
  • itemtypeid
  • itemprice
  • itemsize

тип элемента:

  • TypeId
  • имяТипа
  • текущая цена
  • typesize

В форме редактирования элемента есть комбинированный список typeidComboBox, связанный с item.itemtypeid и загрузкой источника данных списка элементов из источника данных itemtype.

При загрузке формы источники привязки будут установлены как.

    private void Form1_Load(object sender, EventArgs e)
    {
        db = new dbtestEntities();
        itemtypeBindingSource.DataSource = db.usertypes;
        itemBindingSource.DataSource = db.users;

        typeidComboBox.DataBindings.Clear();
        typeidComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.itemBindingSource, "itemtypeid", true));
        typeidComboBox.DataSource = this.itemtypeBindingSource;
        typeidComboBox.DisplayMember = "typename";
        typeidComboBox.ValueMember = "typeid";
        typeidComboBox.SelectionChangeCommitted += typeidComboBox_SelectionChangeCommitted;
    }

Проблема возникает, когда я добавляю некоторый код, как показано ниже в событии SelectionChangeCommitted.

Код:

private void typeidComboBox_SelectionChangeCommitted(object sender, EventArgs e)
    {
        (itemBindingSource.Current as item).itemprice = (itemtypeBindingSource.Current as itemtype).currentprice;
    }

Почему выбор Combobox отменяется и возвращается к старому значению, когда событие SelectionChangeCommitted обрабатывается так же, как в нем изменяется свойство BindingSource Combobox?

Извините мой английский.

1 ответ

Я не знаю почему. Но это решило мою проблему: DataBinding.WriteValue и ComboBox.SelectedItem.

Вот мой рабочий код.

private void typeidComboBox_SelectionChangeCommitted(object sender, EventArgs e)
{
    foreach (Binding binding in (sender as ComboBox).DataBindings)
        {
            binding.WriteValue();
        }
    (itemBindingSource.Current as item).itemprice = ((sender as ComboBox).SelectedItem as itemtype).currentprice;
}
Другие вопросы по тегам