DataGridView中CheckBox列运行时候System.FormatException异常

来源:互联网 发布:单片机烧录器 编辑:程序博客网 时间:2024/05/22 00:11

    在DataGridView手动添加了CheckBox列;在窗体Show的时候,遇到一个错误:错误如下:

DataGridView中发生一下异常:System.FormatException:单元格的Formatted值的类型错误.要替换此默认对话框,请处理DataError事件.

点击以后有一对话框错误如下:

DataGridView中发生一下异常:

SystemArgumentException:为DataGridViewCheckBoxCell提供的值的类型错误.

在System.Windows.Forms.DataGridViewCheckBoxCell.set_EditiingCellFormattedValue(Object value)

在System.Windows.Forms.DataGridView.InitializeEditingCellValue (DataGridViewCessStyle&dataGridViewCellStyle,DataGridViewCell&dataGridViewCell)

要替换此默认对话框,请处理DataError事件.

我之前曾经用过CheckBox列,此次和之前的区别是 AllowUserToAddRows=true;我将该属性设置为false,错误没有出现,可以确定该错误与系统自动添加的行及checBox的默认值为null有关。

我在DefaultValuesNeeded事件中增加了默认值,发现错误依旧。

仔细研究发现如下两种解决方法:

其一:在CellFormatting事件中处理

{

            if (this.dataGridView1.Columns[e.ColumnIndex].Name == "AZK")
            {
                if (e.Value == null)
                    e.Value = false;
            }

}

 

其二:在在CellFormatting事件中不处理,但DataError事件中处理

        {
            if (dataGridView1.Rows[e.RowIndex].IsNewRow)
                return;
        }

 

Note: DataGridView中几个事件发生的顺序记录如下,以备查寻

  在AllowUserToAddRows=true时候的事件发生次序

    Form.Show ---> CellFormatting (如果出错,goto DataError),注意这里的NewRow没有触发DefaultValuesNeeded事件。

如果发生其他比如 RowEnter事件

  (DefaultValuesNeeded) ---> RowEnter ---> CellClick

  (DefaultValuesNeeded) ---> RowsAdded ---> UserAddedRow

  DefaultValuesNeeded事件不会发生在 IsNewRow=true的row上

 

原创粉丝点击