[.net] 마우스 오른쪽 버튼을 클릭하여 DataGridview 행 선택


Answers

    // 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;
Question

마우스 오른쪽 버튼을 클릭하여 DataGridview 행을 어떻게 선택합니까?




당신은 두 가지를해야합니다 :

  1. 모든 행을 지우고 현재를 선택하십시오. 모든 행을 반복하고 Bool Expression 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



DataGridView 서브 클래 MouseDown 하고 그리드에 대한 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;
}