在winform应用程序的数据网格视图中添加上下文菜单

时间:2010-11-17 05:39:07

标签: c# .net winforms datagridview

如何在DataGridView中右键单击菜单项时显示上下文菜单? 我想在菜单中添加删除,以便删除整行。 在此先感谢

3 个答案:

答案 0 :(得分:6)

您需要创建一个带有的上下文菜单 设计器中的“删除行”选项。然后将DGV(数据网格视图)的ContextMenuStrip属性分配给此上下文菜单。

然后双击删除行项目,并添加以下代码:

DGV.Rows.Remove(DGV.CurrentRow);

您还需要为DGV添加MouseUp事件,以便在您右键单击时更改当前单元格:

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

答案 1 :(得分:3)

参考 Miguel 回答
我认为这很容易像这样实现

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

答案 2 :(得分:3)

我知道这个问题已经过时了,但也许有人仍然可以使用它。有一个事件,CellContextMenuStripNeeded。以下代码对我来说非常合适,而且似乎不如MouseUp解决方案那么简单:

private void DGV_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DGV.ClearSelection();
        DGV.Rows[e.RowIndex].Selected = true;
        e.ContextMenuStrip = MENUSTRIP;
    }
}