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