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鍵時出現提示!