简体   繁体   中英

Delete multiple rows in datagridview

I have a function to delete single rows on right click delete in a datagridview..

code:

  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();
            }          
    }

but now I want to delete multiple rows on selection.
First I don't know why I cannot select multiple rows.
Second I want to delete multiple delete using the delete button and right click mouse delete.

Can someone help me?

Edit: Take a look at your code. You are setting the selected row depending on the results of the HitTest method. The DataGridView property SelectedRows will determine which rows are selected. Not sure why you need to execute a HitTest , but then again perhaps you haven't fully explained the desired functionality.

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;
    }
}

Make sure that the MultiSelect property is set to true on your datagrid.

Then, you can utilize the SelectedRows property in the event of your choice:

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

please take care the following case:

if you need to delete records in datagrid, don't just store the rowIndex in datagrid, (instead you should store the corresponding keys in DB):

eg: I want to delete row 1 and 2 in datagrid, I stored their rowIndex in datagrid. after row 1 is deleted in datagrid, data in row 2 will SHIFT UP to row 1, and data in row 3 will SHIFT UP to row 2, because you are using the datagrid rowIndex to locate what data to delete, therefore, result: data1 and data3 will be deleted finally.

            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);
            }

you can write instead of cells[4]: columns id in your DB.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM