Я пытаюсь создать DataGridView, привязанный к DataTable, где один столбец является ComboBox. Код выполняется, но после привязки (не при привязке данных) появляется следующая ошибка: System.ArgumentException: значение DataGridViewComboBoxCell недействительно.
В DataGridView одним из столбцов является DataGridViewComboBoxColumn, который использует перечисление (с именем structureType) в качестве источника:
// ColumnStructure
//
this.ColumnStructure.ValueType = typeof(structureType);
this.ColumnStructure.DataSource = Enum.GetValues(typeof(structureType));
this.ColumnStructure.HeaderText = "Structure";
this.ColumnStructure.Name = "ColumnStructure";
this.ColumnStructure.DataPropertyName = "Structure";
//
Когда я заполняю DataGridView без использования DataTable, он работает нормально:
structureType? structure = GetStructure(part);
dgvObjectTypes.Rows.Add(name, type, structure, count);
Теперь я хотел бы использовать вместо этого DataTable, но не могу заставить его работать. DataTable создается следующим образом:
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Type", typeof(string));
table.Columns.Add("Structure", typeof(DataGridViewComboBoxCell));
table.Columns.Add("Count", typeof(int));
Другие столбцы работают отлично, но я не могу заставить работать столбец «Структура». Вот как я пытался создать поле со списком:
var cb = new DataGridViewComboBoxCell();
cb.ValueType = typeof(structureType);
cb.DataSource = Enum.GetValues(typeof(structureType));
cb.Value = (structureType)structure;
После этого я просто создаю строки для таблицы и устанавливаю таблицу как источник данных для DataGridView:
table.Rows.Add(name, type, cb, count);
dgv.DataSource = table;
Я прочитал много сообщений, в которых утверждалось, что использование перечислений в комбинированных списках вызывает проблемы (например, DataGridView, связанный с DataTable со столбцом Combobox на основе enum), но, похоже, здесь это не так. Я даже пытался использовать явно типизированные массивы строк, но все равно получаю ту же ошибку. Думаю, я что-то не так делаю с DataGridViewComboBoxCell.
В чем может быть проблема?