李嘉齐 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 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制