LJQ_JQ
李嘉齐
采纳率100%
2019-10-01 14:14

新人小白,想问下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条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 2年前

    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 != "")
    {
    在这里写
    }
    }

    点赞 评论 复制链接分享