Вызов ResetBindings для bindingsource для обновления ComboBox приводит к инициализации элемента управления, как обновить элементы без инициализации? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть список строк, который является источником данных для объекта BindingSource, который, в свою очередь, является источником данных для ComboBox.

Когда я изменяю список (добавляю или удаляю строки), я вызываю метод ResetBindings () в BindingSource. Это обновляет элементы в ComboBox, как и ожидалось, но также устанавливает SelectedIndex в «0» вместо неинициализированного значения «-1». Я хочу обновить элементы без инициализации ComboBox

Я уже пытался обработать это в обработчике событий SelectedIndexChanged следующим образом:

private void cmbSelectxx_SelectedIndexChanged(object sender, EventArgs e)
{
   ComboBox cmb = (ComboBox)sender;

   if (!cmb.Focused)
   {
      cmb.SelectedIndexChanged -= new EventHandler(cmbSelectxx_SelectedIndexChanged);
      cmb.SelectedIndex = -1;
      cmb.ResetText();
      cmb.SelectedText = "";
      cmb.SelectedIndexChanged += new EventHandler(cmbSelectxx_SelectedIndexChanged);
      return;
   }

   //...
}

но это не решает мою проблему

Контроль привязки к коду данных:

bs = new BindingSource();
bs.DataSource = SomeList;
cmbSelectxx.DataSource = bs;

1 Ответ

0 голосов
/ 06 апреля 2019

Выполните операции добавления / удаления непосредственно на BindingSource вместо SomeList.Эти операции добавления / удаления распространяются обратно на SomeList.'Обратите внимание, что если выбранный в данный момент элемент в ComboBox будет удален, он обновится до наиболее подходящего значения.

Предположим, что ваш SomeList содержит значения "a", "b", "c", "d".

  1. Если выбрано «b» и оно удалено из BindingSource, ComboBox.SelectedItem изменится на «c».
  2. Если выбрано «b» и «*» удалено из BindingSource, ComboBox.SelectedItem не изменится.
  3. Если «d» выбрано, а затем удалено, ComboBox.SelectedItem изменится на «с».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...