我已经创建了一个上下文菜单,并与我的DataGridView控件相关联。但是,我注意到当我右键单击控件时,dataGridView中的选择不会更改。所以我无法在上下文的事件处理程序中正确获取行。
关于如何实现这一目标的任何建议?
想象一下,我有一个ID olumn,当我点击删除上下文菜单时,我想从数据库中删除该特定条目。
我只需要如何获取该ID 的信息,我可以自己处理删除。
答案 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。