未修改的DataGridViewCheckboxCell判断选中状态时为何抛出空异常
错误原因
未被手动修改过的DataGridViewCheckBoxCell的Value属性默认值为null,直接对null调用ToString()方法会触发空引用异常。手动勾选/取消勾选过的单元格Value会被赋值为true/false的布尔类型值,不存在空值,所以可以正常运行。
修复方案
调整判断逻辑,先做空值校验,直接读取布尔值做判断,避免转字符串的冗余操作:
foreach (DataGridViewRow r in DGV.Rows) { var cbxCell = (DataGridViewCheckBoxCell)r.Cells[0]; // 空值默认视为未选中,如需调整默认状态可自行修改逻辑 if (cbxCell.Value is bool isChecked && isChecked) { // 第四列取值也补充空值保护,避免同类空引用问题 montantFAC = Convert.ToDouble(r.Cells[4].Value?.ToString() ?? "0"); cmd = new SqlCommand(....); // 原有后续逻辑 } }
注意事项
- 布尔类型值直接做逻辑判断即可,不要转成字符串和
"true"做比较,避免出现大小写、格式适配的额外问题 - 所有从单元格读取的值都建议补充空值校验,避免单元格未赋值时触发同类空引用异常
- 如果你需要把从未修改的复选框默认视为选中状态,调整判断逻辑为
cbxCell.Value == null || (cbxCell.Value is bool isChecked && isChecked)即可
内容的提问来源于stack exchange,提问作者Ayoub Ibourk El Idrissi
相关产品推荐
相关产品推荐

