Add context menu in a datagrid view in a winform application

前端 未结 3 1433
小鲜肉
小鲜肉 2020-12-11 05:37

How to show a Context Menu when you right click a Menu Item in a DataGridView ? I would like to add delete in the menu so that the entire row can be deleted . Thanks in Ad

相关标签:
3条回答
  • 2020-12-11 05:53

    You'll need to create a context menu with a "delete row" option in the designer. Then assign the DGV (Data Grid View)'s ContextMenuStrip property to this context menu.

    Then double click on the delete row item, and add this code:

    DGV.Rows.Remove(DGV.CurrentRow);
    

    You'll also need to add a MouseUp event for the DGV that allows the current cell to change when you right click it:

    private void DGV_MouseUp(object sender, MouseEventArgs e)
    {
        // This gets information about the cell you clicked.
        System.Windows.Forms.DataGridView.HitTestInfo ClickedInfo = DGV.HitTest(e.X, e.Y);
    
        // This is so that the header row cannot be deleted
        if (ClickedInfo.ColumnIndex >= 0 && ClickedInfo.RowIndex >= 0)
    
        // This sets the current row
        DataViewMain.CurrentCell = DGV.Rows[ClickedInfo.RowIndex].Cells[ClickedInfo.ColumnIndex];
    }
    
    0 讨论(0)
  • 2020-12-11 06:00

    I know this question is quite old, but maybe someone will still have use for this. There is an Event for this, CellContextMenuStripNeeded. The following code works perfectly for me and seems less hacky than the MouseUp Solution:

    private void DGV_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
    {
        if (e.RowIndex >= 0)
        {
            DGV.ClearSelection();
            DGV.Rows[e.RowIndex].Selected = true;
            e.ContextMenuStrip = MENUSTRIP;
        }
    }
    
    0 讨论(0)
  • 2020-12-11 06:11

    With reference to Miguel answer
    I think this will be easy to implement like this

        int currentRowIndex;
        private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
            currentRowIndex = e.RowIndex;
        }  
        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {    
            dataGridView1.Rows.Remove(dataGridView1.Rows[currentRowIndex]);
        }
    
    0 讨论(0)
提交回复
热议问题