2011-08-01 101 views
5

我有一個函數來刪除右擊單一行刪除一個DataGridView ..刪除多行的DataGridView

代碼:

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
    { 

      if (e.Button == MouseButtons.Right) 
      { 
       var hti = dataGridView1.HitTest(e.X, e.Y); 
       if (hti.RowIndex != -1) 
       { 
        dataGridView1.ClearSelection(); 
        dataGridView1.Rows[hti.RowIndex].Selected = true; 
       } 
      }   
    } 

    private void DeleteRow_Click(object sender, EventArgs e) 
    { 
      Int32 rowToDelete = dataGridView1.Rows.GetFirstRow(DataGridViewElementStates.Selected); 
      if (rowToDelete != -1) 
      { 
       dataGridView1.Rows.RemoveAt(rowToDelete); 
       dataGridView1.ClearSelection(); 
      }   
    } 

,但現在我想在選擇刪除多行。
首先,我不知道爲什麼我不能選擇多行。
其次,我要刪除多個使用刪除按鈕,點擊鼠標右鍵刪除刪除。

有人可以幫助我嗎?

回答

10

編輯: 看看你的代碼。您正在根據HitTest方法的結果設置所選行。所述DataGridView屬性SelectedRows將確定被選擇的行。不知道爲什麼你需要執行HitTest,但是可能你還沒有完全解釋所需的功能。

if (e.Button == MouseButtons.Right) 
{ 
    var hti = dataGridView1.HitTest(e.X, e.Y); 
    if (hti.RowIndex != -1) 
    { 
     dataGridView1.ClearSelection(); 
     dataGridView1.Rows[hti.RowIndex].Selected = true; 
    } 
} 

確保MultiSelect屬性設置爲true你的DataGrid中。

然後,您可以利用SelectedRows財產在你選擇的事件:

foreach (DataGridViewRow row in DataGridView1.SelectedRows) 
{ 
    DataGridView1.Rows.Remove(row); 
} 
+0

多重選擇的作品..但在鼠標右鍵刪除...當我選擇多行,然後右擊它選擇只有一個行......這究竟是爲什麼 – user175084

+1

你檢查DataGrid的'SelectionMode'財產?你確定你選擇了整行而不僅僅是一個單元嗎? –

+0

是的,我選擇了整行,而不僅僅是一個單元格.. where是選擇模式.. ??感謝我的 – user175084

3

請小心以下情況:如果你需要刪除數據網格記錄

, 不只需將rowIndex存儲在datagrid中(而不是您應該將相應的鍵存儲在數據庫中):

例如:我想刪除datagrid中的第1行和第2行,我將它們的rowIndex存儲在datagrid中。 第1行在數據網格中被刪除後,第2行中的數據將上移到第1行,並且 第3行中的數據將上移到第2行, ,因爲您正在使用datagrid rowIndex來查找要刪除的數據, 結果:data1和data3最終將被刪除。