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

新人小白,想问下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 for循环处理大量数据怎么优化
  • ¥15 笔记本接显卡扩展坞重启报错
  • ¥15 为什么这个指令报错啊,一直弄不懂为什么,想问问该怎么弄,决求解决,ubuntu刚入手
  • ¥15 用百度飞将的paddleyolo库里的yolov7训练自己数据集
  • ¥15 Saber里如何查看磁芯的磁通密度
  • ¥25 关于下拉菜单、数据库、关联选项的问题
  • ¥15 STM32 串口DMA同时收发丢字节
  • ¥15 SBML检验显示文档无效改怎么修改?
  • ¥15 微信小程序的爬虫问题
  • ¥15 使用matlab解决如下问题·