(传)Visual C# WinForm中DataGrid批量删除解决之道。

WinForm中的DataGrid与WEBForm中的DataGrid相比,功能要少了许多,但是也有其WEBForm中的DataGrid不可比拟的功能。最近要做一个项目,项目中有一个要求是要在DataGrid中能够进行批量删除记录,而且删除只能是在数据集中进行,不能涉及到数据库。本来WinForm中的DataGrid中可以在选择多行后(按Ctrl然后点相应的行也可以选择不相邻的行)可以直接按键盘上的DEL键进行删除,但是项目要求在删除前要给一个提示,而我们都知道,直接按DEL键是没有任何提示的,所以这个删除事件只有自己写。开始以为很简单,只需要对整个DataGrid循环一次并判断某行是否选中,再在数据集中直接删除相应的行就可以了,但是这样只能删除选定行中的第一行,而其它行是不能删除的,因为每删除一行后,DataGrid刷新了一次,原来选定的行变成不选定了,而且每删除一行后数据集行的索引也相应发了变化。经过研究,终于找到了解决之道,具体办法如下:

 if(MessageBox.Show("删除的行不可恢复,你确定要删除吗?","警告",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
   {
    int ReCount=ds.Tables["CurrentTable"].Rows.Count;
    for(int i=0;i<ReCount;i++)
    {
     if(this.dataGrid1.IsSelected(i))
     {
      ds.Tables["CurrentTable"].Rows[i]["准考证号"]="*";
     }
    
    }
    DataRow[] findRows=ds.Tables["CurrentTable"].Select("准考证号='*'");
    for(int i=0;i<findRows.Length;i++)
    {
     findRows[i].Delete();
    }
    ds.Tables["CurrentTable"].AcceptChanges();
   }

可以把这个事件的快捷键设为DEL,则按DEL键时出现提示!

原文地址:https://www.cnblogs.com/skyblue/p/864058.html