如何在右键单击中选择datagridview行?
答案 0 :(得分:17)
让它的行为与鼠标左键相似吗? e.g。
private void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
dataGridView.CurrentCell = dataGridView[e.ColumnIndex, e.RowIndex];
}
}
答案 1 :(得分:15)
// Clear all the previously selected rows
foreach (DataGridViewRow row in yourDataGridView.Rows)
{
row.Selected = false;
}
// Get the selected Row
DataGridView.HitTestInfo info = yourDataGridView.HitTest( e.X, e.Y );
// Set as selected
yourDataGridView.Rows[info.RowIndex].Selected = true;
答案 2 :(得分:5)
很酷的是在右键单击上添加一个菜单,例如使用“查看客户端信息”,“验证最后发票”,“向此客户端添加日志条目”等选项,等等。
您只需要添加一个ContextMenuStrip对象,添加您的菜单项,并在DataGridView属性中选择它的ContextMenuStrip。
这将在用户右键单击所有选项的行中创建一个新菜单,然后你需要做的就是制作你的魔法:)
请记住,您需要JvR代码来获取用户所在的行,然后获取包含客户端ID的单元格并传递该信息。
希望它有助于改善您的应用程序
答案 3 :(得分:3)
对DataGridView
进行子类化并为网格创建MouseDown
事件,
private void SubClassedGridView_MouseDown(object sender, MouseEventArgs e)
{
// Sets is so the right-mousedown will select a cell
DataGridView.HitTestInfo hti = this.HitTest(e.X, e.Y);
// Clear all the previously selected rows
this.ClearSelection();
// Set as selected
this.Rows[hti.RowIndex].Selected = true;
}
答案 4 :(得分:1)
If e.Button = MouseButtons.Right Then
DataGridView1.CurrentCell = DataGridView1(e.ColumnIndex, e.RowIndex)
End If
代码也可以在VS2019中使用
答案 5 :(得分:0)
您可以在DataGridView的MouseDown事件中使用JvR的代码。
答案 6 :(得分:0)
你必须做两件事:
清除所有行并选择当前行。我循环遍历所有行并使用Bool表达式i = e.RowIndex
进行此
如果你已经完成了第1步,你仍然有很大的陷阱:
DataGridView1.CurrentRow不会返回您之前选择的行(这非常危险)。由于CurrentRow是Readonly,你必须这样做
Me.CurrentCell = Me.Item(e.ColumnIndex, e.RowIndex)
Protected Overrides Sub OnCellMouseDown(
ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs)
MyBase.OnCellMouseDown(e)
Select Case e.Button
Case Windows.Forms.MouseButtons.Right
If Me.Rows(e.RowIndex).Selected = False Then
For i As Integer = 0 To Me.RowCount - 1
SetSelectedRowCore(i, i = e.RowIndex)
Next
End If
Me.CurrentCell = Me.Item(e.ColumnIndex, e.RowIndex)
End Select
End Sub
答案 7 :(得分:0)
从@Alan Christensen
代码转换为VB.NET
Private Sub dgvCustomers_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvCustomers.CellMouseDown
If e.Button = MouseButtons.Right Then
dgvCustomers.CurrentCell = dgvCustomers(e.ColumnIndex, e.RowIndex)
End If
End Sub
我在VS 2017上经过了测试,对我有用!!