0

VS 2013: Winforms В столбце combobox datagridview есть список значений, т. Е. Тег, сброс, отмена и т. Д. Datagridview привязан к datatable, который заполняется из таблицы SQL. Когда столбец combobox встречает значение, не входящее в список, оно ошибочно.Установите «Empty String» в качестве элемента combobox

1) Как я могу получить значение, которое предназначено для заполнения столбца combobox, прежде чем оно произойдет? Если это возможно, я могу добавить значение в список, как указано в ответе ниже.

ответ

0

Вы должны использовать null для значения вместо пустой строки. Контроль уже работает с этим.

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

var comboColumn = ((DataGridViewComboBoxColumn)grid.Columns["combo_column"]); 
if (!comboColumn.Items.Contains(value)) 
    comboColumn.Items.Add(value); 
+0

Проблема заключается в том, что другие приложения задают значения в этих столбцах, и я не могу это контролировать. Я знаю, что NULL работает, мое приложение использует их, но мой вопрос заключался в том, как сделать пустую строку элементом в списке столбцов combobox и/или игнорировать значения, не входящие в список. Я попробую это с пустой строкой, но было бы лучше, если бы я мог просто игнорировать значения, не входящие в список. –

+0

Я застрял, пытаясь реализовать свой ответ. Чтобы установить значение переменной, я должен получить его из datatable непосредственно перед тем, как он заполнит comboboxcolumn. Мне не удалось выяснить, какая строка и столбцы обрабатываются. Я попытался использовать dgv e.RowIndex & e.ColumnIndex, но они не должны быть такими же, как я получаю исключение. Я обновлю свой вопрос, чтобы указать, как получить значение до заполнения столбца combobox. –

0

Настройка события ошибки данных на DataGridView, а затем захватить значения в случае и установить их в списке пункт comboboxcolumn как предложено в предыдущем ответе. Элементы будут отображаться в datagridview, но не будут постоянно сохранены в списке элементов comboboxcolumn.

private void dgvVX130DataErrors(object sender, DataGridViewDataErrorEventArgs e) 
    { 
     DataGridViewComboBoxColumn comboColumn; 
     switch (e.ColumnIndex) 
     { 
      case 4: 
       comboColumn = ((DataGridViewComboBoxColumn)dgvVX130.Columns["DataDomain"]); 
       if (!comboColumn.Items.Contains(dgvVX130.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)) 
       { 
        comboColumn.Items.Add(dgvVX130.Rows[e.RowIndex].Cells[e.ColumnIndex].Value); 
       } 
       break;