在设计时将DataGridView.DefaultCellStyle.NullValue设置为null会导致在运行时添加行时出错。

4

在Visual Studio 2008中:

  • 向表单添加一个新的DataGridView
  • 编辑列
  • 添加一个新的DataGridViewImageColumn
  • 打开此列的CellStyle Builder(DefaultCellStyle属性)
  • 将NullValue从System.Drawing.Bitmap更改为null
  • 尝试在运行时向DataGridView添加新行(dataGridView1.Rows.Add();)
  • 您会收到以下错误信息:System.FormatException:单元格的格式化值类型错误。

如果将NullValue改回System.Drawing.Bitmap(就像它一样),您仍然会在添加行时收到相同的错误。

如果在运行时而不是设计时设置NullValue,则不会出现任何错误。(dataGridView1.Columns[0].DefaultCellStyle.NullValue = null;)

你能告诉我原因吗?

5个回答

2
这可能是设计师中的一个错误;如果你浏览.designer.cs文件(可以从设置NullValue为null之前和之后进行比较),你应该能够看到它生成的代码。

2

Kronoz是正确的。

在设计时设置后,它会将以下内容添加到.designer.cs文件中:

dataGridViewCellStyle1.NullValue = "null";

如果我将"null"修改为null,那么它就可以正常工作了。我使用反射器检查了DataGridViewCellStyle.NullValue set_NullValue(Object)和get_NullValue方法,我认为这里不应该出现字符串值引发任何错误。

无论如何,请注意这一点,如果您想在设计时进行设置,则不要忘记修改.design.cs文件。


1
将 NullValue 从 System.Drawing.Bitmap 更改为 null。
在设计器中将“null”输入到 NullValue 字段时,您正在指定字符串值“null”。将 NullValue 设置为非字符串值的唯一方法是通过编程或自行修改设计器代码进行设置。

1

复选框不能拥有字符串值。 不要在IDE属性对话框中设置任何默认值。 我在RowsDefaultCellStyle.Format属性中写入了“Empty”,导致出现错误。 这是我的自作自受。为了修复问题,我试图将复选框状态设置为未选中,但我只需要删除字符串值即可。


0

我发现最好的方法是从格式区域和默认空值区域中完全删除设计师中的项目。然后它会将其设置回真正的空值。我将尝试在初始化部分中设置它,远离设计师生成的垃圾。


这是 Yoda 再次出现,是的,通过设置:<datagridview>.<colname>.DefaultCellStyle.DataSourceNullValue = CheckState.Unchecked; <datagridview>.<colname>.DefaultCellStyle.NullValue = CheckState.Unchecked;它让我做了我想要的事情。 - user258183

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接