2016-10-14 3 views
1

У нас есть DataGridViewComboBoxColumn, в котором мы зафиксировали четыре значения. Во время выполнения, когда происходит событие dataGridView1_EditingControlShowing, мы пытаемся добавить новые элементы в DataGridViewComboBoxColumn.Обновление существующей коллекции элементов DataGridViewComboBoxColumn

private void dataGridView1_EditingControlShowing(object sender, 
              DataGridViewEditingControlShowingEventArgs e) 
{ 
    ComboBox combo = e.Control as ComboBox; 
    if (combo != null) 
    { 
     combo.DropDown += new System.EventHandler(ComboBox1_DropDown); 
    } 
} 

private void ComboBox1_DropDown(object sender, System.EventArgs e) 
{ 
    ComboBox comboBox = (ComboBox)sender; 
    if (comboBox.Items != null) 
    { 
     List<String> elementname = Elements(); 
     foreach (string s in elementname) 
     { 
     if (!comboBox.Items.Contains(s)) 
     { 
      comboBox.Items.Add(s); 
     } 
     } 
    } 
} 

Я получаю это исключение:

enter image description here

Можете ли вы предложить, как добавить значения к существующему DataGridViewComboBoxColumn в Items коллекции.

ответ

1

Вы добавляете в редактирование Items, но не в ItemsComboBoxColumn, который в конечном итоге будет использоваться для проверки.

Чтобы получить легкий доступ к хостингу DGV, мы используем специальный тип DataGridViewComboBoxEditingControl. Теперь мы добавим новые выборы в обеих Items коллекций сейчас в ComboBox1_DropDown события::

DataGridViewComboBoxEditingControl comboBox = (DataGridViewComboBoxEditingControl)sender; 
DataGridView dgv = comboBox.EditingControlDataGridView; 
if (comboBox.Items != null && dgv != null) 
{ 
    DataGridViewComboBoxColumn dcbc = 
     (DataGridViewComboBoxColumn) dgv.Columns[dgv .CurrentCell.ColumnIndex]; 

    List<String> elementname = Elements.ToList(); 
    foreach (string s in elementname) 
    { 
     if (!comboBox.Items.Contains(s)) 
     { 
      comboBox.Items.Add(s); 
      dcbc.Items.Add(s); 
     } 
    } 
} 

Примечание:

Новый Items не будет persistet если вы код для него.

Так что если вы установили поля в новые значения и сохранили их, вы должны также сохранить и перезагрузить эти новые значения перед повторной загрузкой DGV, иначе значения не будут в списке значений Column и выбросить DataError еще раз!

Обычное место для хранения их было бы в СУБДЕ с DataTable, но и любым другим внешним накопителем, также может быть использован как XML файла или, возможно, dynamic resources и т.д .. Но СУБД является наиболее естественным выбором им.

+0

Я пробовал вышеуказанное решение, предоставленное вами, но все же я получаю ту же ошибку. DataGridViewComboBox Значение ячейки недействительно –

+0

hm, здесь это все изменилось. Когда вы получите сообщение об ошибке? При отбрасывании в первый раз или при последующем падении? – TaW

+0

Когда я выбираю новый элемент из выпадающего списка, я получаю эту ошибку –

Смежные вопросы