System.ArgumentException: значение DataGridViewComboBoxCell недопустимо - PullRequest
2 голосов
/ 21 января 2011
dataGridView.Rows.Add(
    metaData.Offset.ToString("X2"),
    metaData.Length,
    metaData.Format,        // This parameter goes to a ComboBox cell which throws an
    metaData.Description,   //     exception above                       
    null,
    null);

Каков правильный способ программного назначения данных для DataGridViewComboBoxCell?

Ответы [ 3 ]

14 голосов
/ 04 февраля 2012

Чтобы решить эту проблему, просто добавьте «DataError» для DataGridView.Вот и все, шаги: Дважды щелкните представление сетки данных и выберите событие «dataerror» из списка событий.

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

вот оно:)

3 голосов
/ 30 августа 2017

Чтобы решить эту проблему, добавьте событие «DataError» для DataGridView, а затем

просто напишите это: e.Cancel = true;

например:

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
    e.Cancel = true;
}        
0 голосов
/ 06 марта 2019

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

// Combo
DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
combo.DataSource = Enum.GetValues(typeof(PhoneNumberType));
combo.DataPropertyName = "PhoneNumberType";
combo.Name = "PhoneNumberType";
phoneNumberGrid.Columns.Add(combo);

Теперь, когда DataGridView создал новую (пустую) строку, это пустое значение не может быть сопоставленополе со списком.Поэтому вместо того, чтобы игнорировать ошибку, я устанавливаю значение по умолчанию для поля со списком.Я добавил событие DefaultValuesNeeded и там просто установил значение для одного из элементов из перечисления.Вот так:

private void phoneNumberGrid_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
        // Prevent System.ArgumentException: DataGridViewComboBoxCell value is not valid
        e.Row.Cells["PhoneNumberType"].Value = PhoneNumberType.Private;
}

.. и исключение ушло.

...