我发现了几个具有类似问题的主题,但内容似乎略有不同,因此我无法解决我的问题。
在我的应用程序中,我有包含 4 列的 DataTable:
- UInt16
- UInt64
- UInt64
- 由 2 个值组成的自定义枚举类型。
为了显示这个 DataTable 的值,我创建了一个 DataGridView 并将这个表设置为数据源。到现在为止还挺好。我希望枚举字段列包含组合框,但遇到了 DataGridViewComboBoxColumn 类型。我在让它工作时遇到了一些问题,但最终使用了以下方法:
// Create the 4 datarows
// Add the datarows to the data table
// Set the data table as the data source for the data grid view
// Remove the column that represents the enumeration
// Add a DataGridViewComboBoxColumn to the DataGridView as replacement
我创建了 DataGridViewComboBoxColumn,如下所示:
DataGridViewComboBoxColumn cb = new DataGridViewComboBoxColumn();
cb.HeaderText = "My header text";
cb.ValueType = typeof(MyEnumType);
cb.DataSource = Enum.GetValues(typeof(MyEnumType));
cb.FlatStyle = FlatStyle.System;
cb.Name = "Name"; //Same name as the DataColumn and the now deleted DataGridViewColumn
cb.DataPropertyName = "Name"; //Same name as the DataColumn and the now deleted DataGridViewColumn
cb.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
dataGridView.Columns.Add(cb);
一旦我的应用程序启动,我就从一个文本文件中读取数据,该文本文件被放入具有上述 4 种数据类型字段的结构中。然后,我将这些字段添加到 DataTable,如下所示:
DataRow row = dataTable.NewRow();
row["Name of the UInt16 column"] = mystruct.theUInt16;
row["Name of the UInt64 column"] = mystruct.theUInt64;
row["Name of the UInt64 column"] = mystruct.theUInt64_2;
row["Name of the enum column"] = mystruct.theEnumValue;
dataTable.Rows.Add(row);
在启动时 DataError 事件被重复调用。然而,单元格的内容确实被正确填充。(我在几次单击错误后看到了这一点)禁用 DataError 事件(例如分配一个空处理程序)是我不想做的事情。
我认为某种程度上存在某种类型的不匹配。(也许是枚举类型和一个用于显示的字符串?)但这只是一个猜测。dataTable 列和 datagridview 列都将类型设置为枚举。
我希望有人能指出我正确的方向。
提前致谢!