2011-08-01 63 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最终将被删除。