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 Advance
The DataGrid control is limited to displaying data from an external data source. The DataGridView control, however, can display unbound data stored in the control, data from a bound data source, or bound and unbound data together.
C# context menus are the menus that pop up when the user clicks with the right hand mouse button over a control or area in a Windows based form. They are called context menus because the menu is usually specific to the object over which the mouse was clicked.
The DataGridView control provides a customizable table for displaying data. The DataGridView class allows customization of cells, rows, columns, and borders through the use of properties such as DefaultCellStyle, ColumnHeadersDefaultCellStyle, CellBorderStyle, and GridColor.
Set the IsReadOnly property to true to make all the cells in the DataGrid read-only. To make individual columns or cells read-only, set the DataGridColumn. IsReadOnly or DataGridCell. IsReadOnly properties.
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];
}
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]);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With