Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 613
user175084 Avatar asked Aug 01 '11 19:08

user175084


2 Answers

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);
}
like image 54
Bryan Crosby Avatar answered Nov 16 '22 07:11

Bryan Crosby


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.

like image 27
littlecodefarmer758 Avatar answered Nov 16 '22 05:11

littlecodefarmer758