在设计时设置DataGridView.DefaultCellStyle.NullValue为null,在添加行运行

问题描述:

在Visual Studio引发错误2008在设计时设置DataGridView.DefaultCellStyle.NullValue为null,在添加行运行

  • 添加新的DataGridView到窗体
  • 编辑列
  • 添加迈上了一个新DataGridViewImageColumn
  • 打开此列的CellStyle构建器(DefaultCellStyle属性)
  • 将NullValue从System.Drawing.Bitmap更改为null
  • 尝试在运行时向DataGridView添加新行 (dataGridView1.Rows.Add();)
  • 您收到此错误:System.FormatException:格式化 单元格的值具有错误的类型。

如果您将NullValue更改为System.Drawing.Bitmap(原样),则在添加一行时仍会出现相同的错误。

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

你能告诉我为什么?

这可能是设计师的一个错误;如果您查看.designer.cs文件(也许在将NullValue设置为null之前和之后做一个diff),您应该能够看到它生成的代码。

Kronoz是对的。 在设计时将其添加到.designer.cs中:

dataGridViewCellStyle1.NullValue =“null”;

如果我修改“null”null那么它工作正常。我用反射器检查了DataGridViewCellStyle.NullValue的set_NullValue(Object)和get_NullValue,我认为字符串值不应该在这里引发任何错误。

无论如何要小心,如果你想设置它的设计时间,那么不要忘记修改.design.cs。

Change the NullValue from System.Drawing.Bitmap to null

当您在设计器的NullValue字段中输入'null'时,您将指定字符串值“null”。将NullValue设置为非字符串值的唯一方法是通过编程或通过修改设计器代码来设置它。

我发现它更好,如果你只是从设计师一起从格式区域和默认的空值区域删除项目。然后它将其设置回真实的空值。我将尝试将它设置在远离设计器生成垃圾的init部分。

+0

这是yoda了,是通过设置: .DefaultCellStyle.DataSourceNullValue = CheckState.Unchecked; .DefaultCellStyle.NullValue = CheckState.Unchecked; 它让我做我想做的事。 – 2010-01-25 05:45:36

复选框不能有一个字符串值。 不要在IDE属性对话框中设置任何默认值。 我将“Empty”写入了RowsDefaultCellStyle.Format属性,导致了错误。 它是自己造成的。作为一个修复,我试图将复选框状态设置为取消选中,但我只需要删除字符串值。