右键单击以选择datagridview行

时间:2008-10-06 05:58:56

标签: .net datagridview

如何在右键单击中选择datagridview行?

8 个答案:

答案 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的单元格并传递该信息。

希望它有助于改善您的应用程序

http://img135.imageshack.us/img135/5246/picture1ku5.png

http://img72.imageshack.us/img72/6038/picture2lb8.png

答案 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)

你必须做两件事:

  1. 清除所有行并选择当前行。我循环遍历所有行并使用Bool表达式i = e.RowIndex进行此

  2. 如果你已经完成了第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上经过了测试,对我有用!!