c# - DataGridViewCheckBoxColumn : FormatException on boolean-column

标签 c# .net winforms datagridview formatting

我什至不知道去哪里修复这个错误。 最近我在单击 DataGridViewCheckBoxColumn 中的复选框后出现以下异常检查它并离开该单元格:

System.FormatException: "" is not valid for Boolean

这是来自 DataGridView 的完整错误对话框:

enter image description here

我什至不知道我可以处理哪个事件来找到这个问题的原因。 ValidatingCellFormatting事件在错误之前触发,但两者都运行。 如果我处理 DataError -事件我仍然无法弄清楚。 DataGridViewDataErrorEventArgs参数包含以下信息(除其他外):

e.ColumnIndex = 0 
e.RowIndex    = 0 
e.Context     = Commit

完整的异常(exception)(e.Exception.ToString())是:

System.FormatException: is not a valid value for Boolean. ---> System.FormatException: String was not recognized as a valid Boolean. at System.Boolean.Parse(String value) at System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) --- End of inner exception stack trace --- at System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) at System.ComponentModel.TypeConverter.ConvertFrom(Object value) at System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex, Object value)

下面是相关列属性的截图,列有ThreeState=false并且没有为 FalseValue 指定任何内容, TrueValueIndeterminateValue :

enter image description here

BindingSource 的数据源是 List<ErpService.ArrivalChargeAssignment>在哪里 ArrivalChargeAssignment是我的 WCF 网络服务中的一个类,带有 bool -字段 IsAssigned , 所以它永远不可能是 null (甚至是一个空字符串)。

最佳答案

好的,我用 windows 窗体设计器做了一些测试,我发现代码生成器中有一些奇怪的东西。所以,我在测试中所做的是

首先,我添加了一个 DataGridViewCheckBoxColumn 类型的列,并用数据表填充了 datagridview。我添加了一些带有空值的记录。

现在,它工作正常,数据显示正确,也没有出现任何错误。 然后我更改了该 CheckedBoxColumnDefaultCellStyle 属性,并从 Nullvalue 属性中删除了 False 值并重新启动它。 现在,应用程序显示该错误。

我回到那个 DefaultCellStyle 属性并设置了 False 值。然后我再次运行该项目。但是,它仍然向我显示同样的错误。

因此,加载 Form.designer.cs 文件并检查 dataGridViewCellStyle1 对象。我发现该属性是使用字符串类型值 "False" 而不是 bool 类型 false 设置的。

dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle1.NullValue = "False";
this.Column1.DefaultCellStyle = dataGridViewCellStyle1;
this.Column1.HeaderText = "Check Box";
this.Column1.Name = "chkCol";

因此,我已按如下方式更新了该行并再次启动了该项目。现在,错误消失了。

dataGridViewCellStyle1.NullValue = false;

当我创建了 DataGridViewCheckBoxColumn 后,我发现没有为默认单元格样式属性创建对象。因此,默认情况下 NullValue 属性采用 false 值。但是,在修改该属性后,对象已被创建,并且该属性被分配了字符串类型值。

更新:只需重新创建该列即可解决此问题。

关于c# - DataGridViewCheckBoxColumn : FormatException on boolean-column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760983/

相关文章:

c# - 无法在 WCF 中发送更大的字节数组

c# - 如何绑定(bind)到 UWP 中的附加属性?

c# - 如何将一些带条件的字符串连接在一起?

.net - Windows 窗体和 ShowDialog 问题

c# - C#中的PNG图像问题

c# - 处理未处理的异常问题

C# 转换回 var 类型?

c# - 像编辑 ListViewItems 一样编辑 ListView Group Headers

c# - 绘制的矩形仅出现在我的 userControl 的最后一个实例上

mysql - VB.NET 如何获取图像保存位置?