我正在处理一个显示表的DataGridView的应用程序,它看起来像这样:
FieldID | Value
---------------
1 | Jane
2 | Doe
我还有一个Dictionary<int, String>
,它允许我从FieldID运行查找到字段名称(名字,姓氏等)的字符串版本
按照这里的建议How to create LookUp fields in DataGridView?,我尝试将FieldID列中的单元格设置为它们的dictionary[fieldID]
查找。但是,当我设置cell.Value
时,出现以下错误(运行时错误,在我的WinForms应用程序而不是Visual Studio中弹出):
The following exception occurred in the DataGridView:
System.Exception: First Name is not a valid value for Int32. ----->
System.FormatException: Input string was not in a correct format
at System.number.StringToNumber...
等
设置单元格的代码如下:
String value = dictionary[cell.Value]; //value = "First Name"
cell.Value = value; //Error occurs on this line
我的问题是,我不知道DataGridView为何/在何处转换为Int32-我从未明确声明包含FieldID的列严格是int的。如果确实以这种方式解释了该问题,那么我在将String值分配给单元格之前尝试运行以下命令:
dataGridView.Columns[0].CellTemplate.ValueType = typeof(String);
和
cell.ValueType = typeof(String);
但是,两者似乎都没有任何区别。如何停止隐式转换为int?
答案 0 :(得分:0)
我设法自己解决了这个问题-尽管“解决”有点相对。我仍然对覆盖实际列的可能性很感兴趣-但我的解决方案是仅创建一个新列。
相关代码:
foreach(DataGridViewRow row in dataGridView.Rows) {
for(int i = 0; i < row.Cells.Count; i++) {
int fieldID = Convert.ToInt32(row.Cells[0].Value);
String fieldName = dictionary[fieldID];
row.Cells[1].Value = fieldName;
}
}
FieldColumn.Visible = false;