我希望在修改完datagridview单元格里的数据后,数据自动保存到SQL数据库。我写好了代码,如果通过一个按钮来实现,就可以正确保存,但如果把那段代码改到dataGridView的CellValueChanged事件下,就会报“未将对象引用设置到对象的实例。”的错误,请问这是为什么?
下面是那段代码
DataTable dt = ds.Tables["data"]; //创建一个DataTable
sda.FillSchema(dt, SchemaType.Mapped); //把表结构加载到data表中
DataRow dr = dt.Rows.Find(dataGridView1.SelectedCells[0].Value.ToString()); //创建一个DataRow
//设置DataRow中的值
dr["日期"] = dataGridView1.SelectedCells[1].Value.ToString();
dr["收支金额"] = dataGridView1.SelectedCells[2].Value.ToString();
dr["用途"] = dataGridView1.SelectedCells[3].Value.ToString();
//实例化一个SqlCommandBuilder
SqlCommandBuilder cmdbuider = new SqlCommandBuilder(sda);
//调用其Update方法将DataTable更新到数据库中
sda.Update(dt);*/
------解决思路----------------------
DataTable dt=new DataTable();
dt=ds.Tables["data"];
试试?
------解决思路----------------------
加上判断,这个事件在你绑定完数据前就可能触发了
if(ds == null) return;
------解决思路----------------------
我用断点调试,明明在CellValueChanged事件中程序运行了 saveDTdata();语句,并且跳到 saveDTdata()函数将其一句一句运行完毕了,但数据库却没有任何变化,而点击button1按钮却可以成功修改数据库,我再想是不是C#有啥安全机制不允许程序自己修改数据库,一定要用户点击才能修改
不可能,肯定有别的环境不一样,比如Changed事件里在update前看下datatable里的值是不是真的被改掉了,毕竟这个事件是你在修改datatable的时候触发的,或许先后次序上的问题