【发布时间】:2017-01-07 19:25:11
【问题描述】:
我正在尝试创建一个绑定到 DataTable 的 DataGridView,其中一列是 ComboBox。代码运行,但绑定后(不是绑定数据时)出现以下错误:System.ArgumentException: DataGridViewComboBoxCell value is not valid.
在 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";
//
当我在不使用 DataTable 的情况下填充 DataGridView 时,它工作得很好:
structureType? structure = GetStructure(part);
dgvObjectTypes.Rows.Add(name, type, structure, count);
现在我想改用 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 linked to DataTable with Combobox column based on enum),但这里似乎并非如此。我什至尝试使用显式类型的字符串数组,但仍然得到相同的错误。我认为我在 DataGridViewComboBoxCell 上做错了。
可能是什么问题?
【问题讨论】:
标签: c# .net datagridview datatable datagridviewcombobox