关于c#:在设计时将DataGridView.DefaultCellStyle.NullValue设置为null会在添加行运行时引发错误

关于c#:在设计时将DataGridView.DefaultCellStyle.NullValue设置为null会在添加行运行时引发错误

Setting DataGridView.DefaultCellStyle.NullValue to null at designtime raises error at adding rows runtime

在Visual Studio 2008中

  • 将新的DataGridView添加到窗体
  • 编辑栏
  • 添加一个新的DataGridViewImageColumn
  • 打开此列的CellStyle Builder(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中:

dataGridViewCellStyle1.NullValue =" null";

如果我将" null"修改为null,则可以正常工作。我用反射器检查了DataGridViewCellStyle.NullValue set_NullValue(Object)和get_NullValue,我认为字符串值不应在此处引发任何错误。

无论如何,请务必谨慎,如果要设置它的设计时间,请不要忘记修改.design.cs。


这很可能是设计人员的错误。如果浏览一下.designer.cs文件(可能与将NullValue设置为null之前和之后的区别),您应该能够看到它生成的代码。


复选框不能具有字符串值。
不要在IDE属性对话框中设置任何默认值。
我在RowsDefaultCellStyle.Format属性中写入了"空",这导致了错误。
这是自我造成的。作为修复,我试图将复选框状态设置为未选中,但是我只需要删除字符串值。


Change the NullValue from System.Drawing.Bitmap to null

在设计器中为NullValue的字段中输入" null"时,您将指定字符串值" null"。将NullValue设置为非字符串值的唯一方法是以编程方式设置它,或者自己修改设计器代码。


我发现,如果只从设计器中删除"格式"区域和默认空值区域中的所有项,那就更好了。然后,将其设置回真实的空值。我将尝试在init部分中将其设置为远离设计人员生成的废话。


推荐阅读