当前位置: 代码迷 >> C# >> C# DataGridView 获取NULL错误
  详细解决方案

C# DataGridView 获取NULL错误

热度:605   发布时间:2016-05-05 05:25:21.0
C# DataGridView 获取NULL异常
先上代码

    foreach (DataGridViewRow row in this.dgv.Rows) 
            {
                //这里有2个日志记录
                if (row.Cells["选择"].EditedFormattedValue.ToString().ToUpper() == "TRUE")
                {
                    if (jhid != "") { jhid += ";"; }
                    jhid += row.Cells["计划ID"].Value.ToString();
                }
            }

"选择" 这个列是个CheckBox ,本机WIN7 64 调试跑很正常,可是在winXP s3上跑却报了“未将对象引用设置到对象的实例
目标机上没有装软件,没法调试。。本机有正常,我加了点日志,
日志如下

进入
foreach (DataGridViewRow row in this.dgv.Rows)
【Time】2014-12-26 14:32:12
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
row.Cells["入库选择"].EditedFormattedValue.ToString().ToUpper()
FALSE
【Time】2014-12-26 14:32:12
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
进入
foreach (DataGridViewRow row in this.dgv.Rows)
【Time】2014-12-26 14:32:12
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
row.Cells["入库选择"].EditedFormattedValue.ToString().ToUpper()
FALSE
【Time】2014-12-26 14:32:12
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
进入
foreach (DataGridViewRow row in this.dgv.Rows)
【Time】2014-12-26 14:32:17
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
row.Cells["入库选择"].EditedFormattedValue.ToString().ToUpper()
TRUE
【Time】2014-12-26 14:32:17
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
idStr
57
【Time】2014-12-26 14:32:17
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
进入
foreach (DataGridViewRow row in this.dgv.Rows)
【Time】2014-12-26 14:32:17
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
row.Cells["入库选择"].EditedFormattedValue.ToString().ToUpper()
FALSE
【Time】2014-12-26 14:32:17
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
入库操作出错:
未将对象引用设置到对象的实例.
【Time】2014-12-26 14:32:22

dgv里面数据只有两条。。而他foreach执行了4次。。我理解算上列标题也算一行。。也就3次,可他循环进入出现了4次,然后就报错,然后我有试过吧foreach换成 for循环,只执行一次。。
可是在dgv_出库单主单.Rows[i].Cells["入库选择"].EditedFormattedValue.ToString().ToUpper() == "TRUE" 这里就直接报错。。
真心不知道什么原因了。求大神帮我看看,有遇到过的告诉我下,谢谢哈
------解决思路----------------------
获取EditedFormattedValue是想干什么,直接获取value不好吗
如果你的表格绑定了数据源,你应该直接去遍历数据源
------解决思路----------------------
1.如红孩儿所说,处理 后台的datatable更方便
2.如果非要从界面取值,获取到的对象先判定下是否为null再继续下一步也不复杂呀
------解决思路----------------------
未将对象引用设置到对象的实例   说明某个字段为null值,可能就是Rows[i].Cells["入库选择"].EditedFormattedValue的值为null,打个断点调试一下,调试的时候,看看没有属性的值。
  相关解决方案