我做了一个邮件收发系统,不是很成熟,邮件账户列表使用数据库的一张表绑定到datagridview控件,删除一行数据的操作,我是这样写的 :
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
int strid = Convert.ToInt32(dataGridView1.CurrentRow.Cells["id"].Value.ToString());
MessageDataContext mdc = new MessageDataContext();
//linq to sql创建的实体类,调用存贮过程
mdc.ddo_Delete(strid);
mdc.SubmitChanges();
当删除最后一条数据时提示:
int strid = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString());这行代码未将对象引用设置到对象的实例
请大家看看是什么问题?
假如 dataGridView1.Rows.Remove(dataGridView1.CurrentRow); 执行成功,并且删除了最后一条数据,
那么此时 dataGridView1.Rows.Count 就等于 0 了,因此也就没有 CurrentRow了。
所以你应该调换这两句代码的位置,先 Convert,然后再 Remove.
可能是dataGridView1.CurrentRow.Cells为null或者dataGridView1.CurrentRow.Cells[0].Value为null
这个错误已经很明白了对象为空。自己调试跟踪下就能找到错误了,貌似你的想法有点问题,解决方法正如1楼所说一样。删除之前先取出id,如果删除之后取出id其实是取出要删除的下一条id不知道你有没有发现?
对于楼主的问题看是看不出来的,只能进行调试,
出现的错误是 未将对象引用设置到对象的实例,应该是在引用数据时出现的错误
楼主可以对数据进行一步一步调试输出,肯定会找到问题所在
我比较喜欢用
Response.Write();
Response.End();
祝楼主早日解决问题!