如何在DataGridView上使用右键单击上下文菜单?

时间:2011-05-22 02:37:03

标签: c# winforms datagridview

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果单击一个单元格,则可以显示上下文菜单并选择当前单元格。

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

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

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

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

答案 2 :(得分:0)

添加,

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

然后在上下文菜单方法中使用currentRow。