删除datagridview中的多个行

时间:2011-08-01 19:31:06

标签: c# winforms 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();
            }          
    }

但现在我想在选择时删除多行 首先我不知道为什么我不能选择多行 其次我想使用删除按钮删除多个删除并右键单击鼠标删除。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分: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

然后,您可以选择使用SelectedRows属性:

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

答案 1 :(得分:3)

请注意以下情况:

如果你需要删除datagrid中的记录, 不要只将rowIndex存储在datagrid中(而应将相应的密钥存储在DB中):

例如:我想删除datagrid中的第1行和第2行,我将它们的rowIndex存储在datagrid中。 在datagrid中删除第1行之后,第2行中的数据将向上移动到第1行,并且 第3行中的数据将向上移动到第2行, 因为您正在使用datagrid rowIndex来定位要删除的数据,因此, 结果:data1和data3最终将被删除。

答案 2 :(得分:0)

            foreach (DataGridViewRow row in dgShow.SelectedRows)
            {
                string id = row.Cells[4].Value.ToString();
                int x = Convert.ToInt16(id);
                var del = context.ServicesPrice.Where(current => current.Id == x).FirstOrDefault();
                context.ServicesPrice.Remove(del);
            }

您可以编写而不是单元格[4]:数据库中的列ID。