李嘉齐 2019-10-01 14:14 采纳率: 100%
浏览 356
已采纳

新人小白,想问下C# dataGridView 编辑内容后插入到数据库表 提示‘未将对象引用设置到实例'是什么原因。

新人小白,想问下C# dataGridView 编辑内容后插入到数据库表 提示‘未将对象引用设置到实例'是什么原因。

图片说明

  for (int i = 0; i < dataGridView2.Rows.Count-1; i++)
                {

                    int itm = i + 1;

                    //if (dataGridView2.Rows[i].Cells[0].Value != "")
                    //{
                        string zj_no = (string)dataGridView2.Rows[i].Cells[0].Value.ToString();
                        string strsql2 = "insert into tf_yg6_ljq(YG_NO,ITM,ZJ_NO) values('" + textBox1.Text + "'," + itm + ",'" + zj_no + "')";
                        sc.ExecuteScalarCount(strsql2);
                    //}
                    //else
                    //{
                    //    return;
                    //}
                }

图片说明

在网上查了下原因,是说因为dataGridView 在新增列时会自动插入一个新的空白行,导致插入的值为NULL 不能ToString()

后面试了下先判断Value的值不为空再做转换 发现Value的值是空的是什么原因?

图片说明

然后测试了下直接插入Value的值发现插入到后台为空,是不是就是没有取到我输入的值?

我应该怎么样才能把自己在dataGridView列里输入的值插入到表单里呢?

新人小白~已经百度过好几种方式了,遍历也尝试了下也是这样的情况

后面2楼大神的说法将代码改为了:

                for (int i = 0; i < dataGridView2.Rows.Count; i++)
                {

                    int itm = i + 1;

                    if (dataGridView2.Rows.Count>0)
                    if (dataGridView2.Rows[i].Cells[0] != null)
                    if (dataGridView2.Rows[i].Cells[0].Value != null)
                    if (dataGridView2.Rows[i].Cells[0].Value != "")
                    {
                        string zj_no = dataGridView2.Rows[i].Cells[0].Value.ToString();
                        string strsql2 = "insert into tf_yg6_ljq(YG_NO,ITM,ZJ_NO) values('" + textBox1.Text + "'," + itm + ",'" + zj_no + "')";
                        sc.ExecuteScalarCount(strsql2);

                    }
                    else
                    {
                        return;
                    }
                }

这样就不会存在插入空值的记录导致报错了,但是插入的记录一直少了一条

图片说明

调试看了当i=1 的时候dataGridView2.Rows[i].Cells[0].Value 的值就为空了,但是我dataGridView里的第二行明明又输入值,是什么原因? 请教下各位大神~

图片说明

查出什么原因了,是因为在输入信息时还处于编辑状态

图片说明

需要在代码循环前面加入 dataGridView2.EndEdit();
用来结束编辑状态才可以存入值。 谢谢 问题已经解决了~

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-10-01 14:19
    关注

    if (dataGridView2.Rows[i].Cells.Count() > 1)
    if (dataGridView2.Rows[i].Cells[0] != null)
    if (dataGridView2.Rows[i].Cells[0].Value != null)
    {
    if (dataGridView2.Rows[i].Cells[0].Value != "")
    {
    在这里写
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵