在设计时将 DataGridView.DefaultCellStyle.NullValue 设置为 null 会在添加行运行时引发错误
在 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;)
你能告诉我这是为什么吗?
In Visual Studio 2008
- add a new DataGridView to a form
- Edit Columns
- Add a a new DataGridViewImageColumn
- Open the CellStyle Builder of this column (DefaultCellStyle property)
- Change the NullValue from System.Drawing.Bitmap to null
- Try to add a new Row to the DataGridView at runtime
(dataGridView1.Rows.Add();) - You get this error: System.FormatException: Formatted
value of the cell has a wrong type.
If you change back the NullValue to System.Drawing.Bitmap (as it was) you still get the same error at adding a row.
If you set the NullValue at runtime instead of designtime you don't get anny error.
(dataGridView1.Columns[0].DefaultCellStyle.NullValue = null;)
Could you tell me why is that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
克罗诺兹是对的。
在设计时设置它后,它会将其添加到 .designer.cs 中:
dataGridViewCellStyle1.NullValue = "null";
如果我将 "null" 修改为 null 那么它就可以正常工作。 我使用反射器检查了 DataGridViewCellStyle.NullValue set_NullValue(Object) 和 get_NullValue ,我认为字符串值不应在此处引发任何错误。
无论如何要小心这一点,如果你想在设计时设置它,那么不要忘记修改 .design.cs。
Kronoz is right.
After setting it at designtime it adds this to the .designer.cs:
dataGridViewCellStyle1.NullValue = "null";
If I modify "null" to null then it works fine. I checked the DataGridViewCellStyle.NullValue set_NullValue(Object) and get_NullValue with reflector and I think that a string value shouldn't raise any error here.
Anyway be careful with this and if you want to set it designtime then don't forget to modify the .design.cs.
这很可能是设计者的一个错误; 如果您查看一下 .designer.cs 文件(也许在将 NullValue 设置为 null 之前和之后进行比较),您应该能够看到它生成的代码。
This may well be a bug in the designer; if you take a look around at the .designer.cs file (maybe doing a diff from before and after you set NullValue to null) you should be able to see the code it generates.
我发现,如果您从设计器的“格式”区域和默认空值区域中一起删除该项目,效果会更好。 然后将其设置回真正的空值。 我将尝试将其设置在初始化部分中,远离设计师生成的垃圾。
I found that its better if you just delete the item from the designer all together from the Format area and the default null value area. Then it sets it back to the real null. I'm going to try to set it in the init section away from the designer generated crap.
复选框不能有字符串值。
不要在 IDE 属性对话框中设置任何默认值。
我将“Empty”写入 RowsDefaultCellStyle.Format 属性,这导致了错误。
这是自作自受。 作为修复,我尝试将复选框状态设置为未选中,但我只需要删除字符串值。
Checkbox can't have a String value.
Don't set any default value in the IDE properties dialog.
I had "Empty" written into the RowsDefaultCellStyle.Format property and that caused the error.
It was self inflicted. As a fix I was trying to set the checkbox state to unchecked but I just needed to delete the string value.
当您在设计器中的 NullValue 字段中输入“null”时,您正在指定字符串值“null”。 将 NullValue 设置为非字符串值的唯一方法是以编程方式设置或自行修改设计器代码。
When you enter 'null' into the field for NullValue in the Designer, you are specifing the string value "null". The only way to set NullValue to a non-string value is to set it programmatically or by modifing the designer code yourself.