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

StackOverflow https://stackoverflow.com/questions/48271

  •  09-06-2019
  •  | 
  •  

在 Visual Studio 2008 中

  • 将新的 DataGridView 添加到表单
  • 编辑列
  • 添加一个新的 DataGridViewImageColumn
  • 打开该列的 CellStyle Builder(DefaultCellStyle 属性)
  • 将 NullValue 从 System.Drawing.Bitmap 更改为 null
  • 尝试在Runtime(DataGridView1.Rows.Add();)的DataGridView中添加新行
  • 你会得到这个错误:系统.FormatException:该单元格的格式化值错误。

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

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

你能告诉我这是为什么吗?

有帮助吗?

解决方案

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

其他提示

克罗诺兹是对的。在设计时设置它后,它将其添加到 .designer.cs 中:

dataGridViewCellStyle1.NullValue = "null";

如果我修改 “无效的”无效的 然后就可以正常工作了。我使用反射器检查了 DataGridViewCellStyle.NullValue set_NullValue(Object) 和 get_NullValue ,我认为字符串值不应在此处引发任何错误。

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

将 NullValue 从 System.Drawing.Bitmap 更改为 null

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

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

我发现如果您从设计器的“格式”区域和默认空值区域中一起删除该项目,效果会更好。然后将其设置回真正的空值。我将尝试将其设置在初始化部分中,远离设计师生成的垃圾。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top