新人小白,想问下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();
用来结束编辑状态才可以存入值。 谢谢 问题已经解决了~