我用DataGridView绑定到一个BindingSource上,绑定代码没问题。在界面上操作DataGridView,添加或者修改界面上的数据,数据源中的数据正常变化。但是唯独删除DataGridView中的某行,数据源得不到更新(datagridview的AllowUserToDeleteRows属性也设置为True了)。我的代码逻辑是处理datatable的RowChanged事件:我是这样想的,绑定dataset之后,对DataGridView的修改会引发DataTable内的RowChanged事件,我只需要处理这个事件就能及时更新数据源了。处理代码如下private void UpdateDateBase(object sender, DataRowChangeEventArgs e)
{
switch(e.Action)
{
case DataRowAction.Add: DataBase.Add(e.Row,InformationDataSet); break;
case DataRowAction.Change: DataBase.Modify(e.Row,InformationDataSet); break;
case DataRowAction.Delete: DataBase.Delete(e.Row,InformationDataSet); break;
}
在这个方法前面加断点后(断点在private前),无论是在DataGridView中修改还是增加一行,程序均在断点处停止,但是如果要是删除DataGridView中的某一行,程序没有在相同的断点处停止。这样可以推断删除操作没有正常引发RowChanged事件,但是修改或者增加的操作却都引发了,请问这是为什么?
{
switch(e.Action)
{
case DataRowAction.Add: DataBase.Add(e.Row,InformationDataSet); break;
case DataRowAction.Change: DataBase.Modify(e.Row,InformationDataSet); break;
case DataRowAction.Delete: DataBase.Delete(e.Row,InformationDataSet); break;
}
在这个方法前面加断点后(断点在private前),无论是在DataGridView中修改还是增加一行,程序均在断点处停止,但是如果要是删除DataGridView中的某一行,程序没有在相同的断点处停止。这样可以推断删除操作没有正常引发RowChanged事件,但是修改或者增加的操作却都引发了,请问这是为什么?
解决方案 »
- 如果用HttpRequest或者其他方法下载URL以点号结尾的图片?
- C#后台模拟按键问题。调用了API SendMessage
- [新手问题]关于三层中configurationManager读不出app.config的问题
- 怎么去除windows7强制关机阻止界面
- c#2005如何打开并写EXCEL2003?请教高手,给个连接或源码
- C#如何编写代码,把一幅200dpi的图像转换成100dpi的图像?
- 问个问题,大家不要笑我啊。到底什么时候需要用委托
- 初学者的问题,C#开发Asp.net的疑惑,请高手不要笑
- 请教:在C#中怎么把1-30带圆圈的数字,即①②③④⑤⑥⑦⑧⑨⑩。。。。。
- A、B值互换
- 额。。。什么是字典表?怎么建??
- 关于在Access存储图片及视频碰到的一些问题
先谢谢你,我手动查看了数据库,在datagridview里删除一行后,数据库中的相应数据是没有变化的。至于你提到的DataKeyNames,我现在设置下看看。
这个属性貌似是WEB FORM 里的,我用的是winform。^_^!
再者,你要看你删除行使用的方法与DataRowAction.Delete是否匹配,这也可能导致删除的时候不能引发该事件。
建议改换别的方法,直接使用DataAdapter的Update方法可以更新对数据库的所有更改,该方法必须设主键。当然,该方法功能也有限,在需要时还可以自己编写强功能的Update方法。
感谢你的回答,事实情况确实如你所说。在DataGridView里删除一行,其实最终调用的是Remove方法,也就是这行从数据源中彻底删除,因为不是调用的Delete方法,所以也不会引发RowChanged事件,即使用Adapter的Update方法强行更新也没有用,因为行彻底被删除!