2016-04-17 2 views
1

У меня есть элемент управления DataGridView в моем приложении Windows Forms, который позволяет пользователям редактировать список продуктов. Чтобы изменить категорию продукта, я хочу, чтобы пользователь добавлял новые записи или выбирал из ранее введенных. Для этого я добавил столбец comboBox, который привязан к DataSource, который получает имена отдельных категорий из таблицы продуктов. С помощью некоторых других SO вопросов, я был в состоянии сделать это comboBox редактируемые с помощью этого кода:Столбец DataGridView ComboBox, не принимающий новые значения

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == CategorySelector.Index) 
    { 
     ComboBox combo = e.Control as ComboBox; 
     if (combo == null) 
      return; 
     combo.DropDownStyle = ComboBoxStyle.DropDown; 
    } 
} 

Но проблема в том, что, когда я пытаюсь изменить столбец категории comboBox и добавить новую категорию, кроме перечисленных, и когда я переключаюсь на другую ячейку, он переключается на старый элемент категории для существующего продукта или пустой для нового продукта. Скажите, пожалуйста, как я могу добавить новую категорию через эту колонку comboBox?

+0

Опубликовать коды, которые вы пытались добавить в категорию. –

+0

@RezaAghaei Я использую автоматически созданные методы DataGridView для добавления. –

+0

«DataGridViewComboBoxColumn» показывает только элементы своего «DataSource». Поэтому, если вы ожидаете, что он отобразит новый элемент в списке, вы должны добавить новый элемент в свой источник данных. –

ответ

1

Наконец-то я решил это сам. Я внедрил событие LostFocuscomboBox, где я добавил код для обновления связанного DataSet с новым элементом.

Элемент успешно добавлен, но одна проблема по-прежнему сохраняется. Элемент не будет выбран после его добавления. ComboBox по-прежнему сбрасывается на предыдущий выбор. Однако я могу выбрать новый элемент вручную. Но если вы сможете решить эту ошибку, это станет лучшим UX для пользователя. Ниже приводится способ добавления нового товара:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == CategorySelector.Index) 
    { 
     ComboBox combo = e.Control as ComboBox; 
     if (combo == null) 
      return; 
     combo.DropDownStyle = ComboBoxStyle.DropDown; 
     combo.LostFocus += combo_LostFocus; 
    } 
} 
void combo_LostFocus(object sender, EventArgs e) 
{ 
    ComboBox c = (ComboBox)sender; 
    if (c.FindStringExact(c.Text.Trim().ToLower()) == -1) 
    { 
     inventoryCategorySet.Tables[0].Rows.Add(c.Text.Trim().ToLower()); 
     inventoryCategorySet.AcceptChanges(); 
    } 
} 
Смежные вопросы