9

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

4

8 回答 8

21

让它的行为类似于鼠标左键?例如

private void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        dataGridView.CurrentCell = dataGridView[e.ColumnIndex, e.RowIndex];
    }
}
于 2009-06-02T12:38:51.863 回答
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;
于 2008-10-06T06:19:19.090 回答
5

很酷的事情是在右键单击时添加一个菜单,例如“查看客户信息”、“验证最后一张发票”、“向该客户添加日志条目”等选项。

您只需要添加一个 ContextMenuStrip 对象,添加您的菜单项,然后在 DataGridView 属性中选择它的 ContextMenuStrip。

这将在用户右键单击所有选项的行中创建一个新菜单,然后您需要做的就是施展魔法:)

请记住,您需要 JvR 代码来获取用户所在的行,然后抓取包含客户端 ID 的单元格并传递该信息。

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

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

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

于 2008-10-16T10:07:14.683 回答
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;
}
于 2009-02-06T17:08:35.897 回答
1

@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 上进行了测试,它对我有用!!!

于 2020-01-10T03:27:35.643 回答
1
If e.Button = MouseButtons.Right Then
            DataGridView1.CurrentCell = DataGridView1(e.ColumnIndex, e.RowIndex)
End If

代码也适用于 VS2019

于 2020-07-31T09:24:13.153 回答
0

您可以在 DataGridView 的 MouseDown 事件中使用 JvR 的代码。

于 2009-01-19T12:58:22.713 回答
0

你必须做两件事:

  1. 清除所有行并选择当前行。我遍历所有行并i = e.RowIndex为此使用布尔表达式

  2. 如果您完成了第 1 步,您仍然有一个很大的陷阱:
    DataGridView1.CurrentRow 不会返回您之前选择的行(这很危险)。由于 CurrentRow 是只读的,你必须这样做

    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
    
于 2009-06-18T15:07:29.230 回答