Search code examples
vb.netdatagridviewright-clickcontextmenustrip

DataGridView select Row


I want to select a row in my DataGridView with a right click. But with my current code I first have to click on the row with a regular left mouse click.

Is there any way to select the current row with a right click and than open a ContextMenuStrip?

Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
    If e.Button = Windows.Forms.MouseButtons.Right AndAlso e.RowIndex >= 0 Then
        Me.DataGridView1.CurrentCell = Me.DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)

    End If
End Sub

Private Sub datagridview1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    If e.Button = Windows.Forms.MouseButtons.Right Then
        Dim hti As DataGridView.HitTestInfo = sender.HitTest(e.X, e.Y)
        If hti.Type = DataGridViewHitTestType.Cell Then
            If Not DataGridView1.Rows(hti.RowIndex).Selected Then
                DataGridView1.ClearSelection()
                DataGridView1.Rows(hti.RowIndex).Selected = True
            End If
        End If
    End If
End Sub

Solution

  • Try this:

       Private Sub DataGrid1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    
        On Error Resume Next
    
        If e.Button = MouseButtons.Right Then
    
            'Clear previous selections
            For x As int32 = 0 To ds.Tables(0).Rows.Count() - 1
                DataGrid1.UnSelect(x)
            Next x
    
            'select row under mouse click
            Dim info As DataGrid.HitTestInfo = DataGrid1.HitTest(e.X, e.Y)
    
            If info.Row > -1 Then
    
                DataGrid1.CurrentRowIndex = info.Row
                DataGrid1.Select(info.Row)
    
                Application.DoEvents()
    
                DataGridContextMenu.Show(Cursor.Position)
    
            End If
    
            info = Nothing
    
        End If
    
    End Sub