当前位置: 代码迷 >> C# >> 请教有关dataGridView的CellValueChanged事件
  详细解决方案

请教有关dataGridView的CellValueChanged事件

热度:403   发布时间:2016-04-28 08:32:24.0
请问有关dataGridView的CellValueChanged事件
我希望在修改完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);*/
------解决思路----------------------
引用:
Quote: 引用:

还是说你放在比如button click事件中就可以,然后放在值变化事件中就不行了?

请看楼上

DataTable dt=new DataTable();
dt=ds.Tables["data"];
试试?
------解决思路----------------------
加上判断,这个事件在你绑定完数据前就可能触发了
if(ds == null) return;
------解决思路----------------------
引用:
Quote: 引用:

我用断点调试,明明在CellValueChanged事件中程序运行了 saveDTdata();语句,并且跳到 saveDTdata()函数将其一句一句运行完毕了,但数据库却没有任何变化,而点击button1按钮却可以成功修改数据库,我再想是不是C#有啥安全机制不允许程序自己修改数据库,一定要用户点击才能修改

不可能,肯定有别的环境不一样,比如Changed事件里在update前看下datatable里的值是不是真的被改掉了,毕竟这个事件是你在修改datatable的时候触发的,或许先后次序上的问题
  相关解决方案