如何在数据网格视图上使用右键单击上下文菜单

本文关键字:右键 单击 菜单 上下文 视图 数据 数据网 网格 | 更新日期: 2023-09-27 17:57:06

我创建了一个上下文菜单,并与我的 DataGridView 控件相关联。但是,我注意到当我右键单击控件时,dataGridView 中的选择不会更改。所以我无法在上下文的事件处理程序中正确获取行。

关于我如何实现这一目标的任何建议?

假设我有一个 ID olumn,当我单击删除上下文菜单时,我想从数据库中删除该特定条目。

我只需要有关如何获取该ID的信息,我可以自己处理删除。

如何在数据网格视图上使用右键单击上下文菜单

    private void dataGridViewSource_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button != MouseButtons.Right || e.RowIndex == -1 || e.ColumnIndex == -1) return;
        dataGridViewSource.CurrentCell = dataGridViewSource.Rows[e.RowIndex].Cells[e.ColumnIndex];
        contextMenuStripGrid.Show(Cursor.Position);
    }
这是

在单击单元格时显示上下文菜单并选择当前单元格的方式。

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
        if (hit.Type == DataGridViewHitTestType.Cell)
        {
            dataGridView1.CurrentCell = dataGridView1[hit.ColumnIndex, hit.RowIndex];
            contextMenuStrip1.Show(dataGridView1, e.X, e.Y);
        }
    }
}

在菜单项中的单击事件处理程序中,检查 dataGridView1.CurrentRow 以找出当前选择的行。例如,如果网格绑定到数据源:

private void test1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    var item = dataGridView1.CurrentRow.DataBoundItem;
}

测试此代码时,请确保未设置 DataGridView.ContextMenuStrip 属性。

添加,

DataGridViewRow currentRow;
void DataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.RowIndex >= 0)
        currentRow = self.Rows[e.RowIndex];
    else
        currentRow = null;
}

然后在上下文菜单方法中使用当前行。