Development Tip

DataGridView 컨트롤에서 선택한 모든 행을 선택 취소하는 방법은 무엇입니까?

yourdevel 2021. 1. 6. 20:31
반응형

DataGridView 컨트롤에서 선택한 모든 행을 선택 취소하는 방법은 무엇입니까?


DataGridView사용자 컨트롤의 빈 (비행) 부분을 클릭 할 때 컨트롤 에서 선택한 모든 행을 선택 취소하고 싶습니다 .
어떻게 할 수 있습니까?


의 모든 행과 셀을 선택 취소하려면 다음 방법을 사용할DataGridView있습니다ClearSelection .

myDataGridView.ClearSelection()

첫 번째 행 / 셀이 선택된 상태로 표시되지 않도록 하려면 CurrentCell속성Nothing/로 설정null 하면 컨트롤이 다시 포커스를받을 때까지 포커스 사각형이 일시적으로 숨겨집니다.

myDataGridView.CurrentCell = Nothing

사용자가의 빈 부분을 클릭 한시기를 확인하려면 해당 이벤트DataGridView처리MouseUpHitTestHitTestInfo.Nowhere 해야합니다 . 경우 클릭 위치를 확인하고 . 예를 들면 :

Private Sub myDataGridView_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Forms.MouseEventArgs)
    ''# See if the left mouse button was clicked
    If e.Button = MouseButtons.Left Then
        ''# Check the HitTest information for this click location
        If myDataGridView.HitTest(e.X, e.Y) = DataGridView.HitTestInfo.Nowhere Then
            myDataGridView.ClearSelection()
            myDataGridView.CurrentCell = Nothing
        End If
    End If
End Sub

물론 기존 DataGridView컨트롤을 하위 클래스 로 만들어이 모든 기능을 단일 사용자 지정 컨트롤로 결합 할 수도 있습니다 . 위에 표시된 OnMouseUp방법 과 유사하게 메서드 를 재정의해야합니다 . 또한 DeselectAll편의를 위해 메서드를 호출 ClearSelection하고 CurrentCell속성을로 설정 하는 공용 메서드 를 제공하고 싶습니다 Nothing.

(질문이 언어를 지정하지 않았기 때문에 코드 샘플은 모두 VB.NET에서 임의로 제공됩니다. 이것이 귀하의 모국어가 아닌 경우 사과드립니다.)


감사합니다 Cody 여기 심판에 대한 C # :

if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            DataGridView.HitTestInfo hit = dgv_track.HitTest(e.X, e.Y);
            if (hit.Type == DataGridViewHitTestType.None)
            {
                dgv_track.ClearSelection();
                dgv_track.CurrentCell = null;
            }
        }

세트

dgv.CurrentCell = null;

사용자가 dgv의 빈 부분을 클릭 할 때.


내 첫 번째 행이 기본적으로 선택된 이유를 알았고 기본적으로 선택하지 않는 방법을 찾았습니다.

기본적으로 내 datagridview는 내 Windows 양식에서 첫 번째 탭 중지가있는 개체였습니다. 다른 개체에서 탭 중지를 먼저 설정 (데이터 그리드에 대한 탭 중지를 비활성화하면 작동 함) 첫 번째 행 선택 비활성화


나는 같은 문제에 부딪 혔고 해결책을 찾았습니다 (전적으로 혼자가 아니지만 인터넷이 있습니다)

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}

이것은 작은 트릭입니다. 행이 선택되는 것을 볼 수있는 유일한 방법은 첫 번째 열 (column [0]이 아니라 따라서 하나)을 사용하는 것입니다. 다른 행을 클릭하면 파란색 선택이 더 이상 표시되지 않고 화살표 만 선택한 행을 나타냅니다. 아시다시피, 저는 gridview에서 rowSelection을 사용합니다.


VB.net에서 Sub에 사용 :

    Private Sub dgv_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv.MouseUp
    ' deselezionare se click su vuoto
    If e.Button = MouseButtons.Left Then
        ' Check the HitTest information for this click location
        If Equals(dgv.HitTest(e.X, e.Y), DataGridView.HitTestInfo.Nowhere) Then
            dgv.ClearSelection()
            dgv.CurrentCell = Nothing
        End If
    End If
End Sub

ReferenceURL : https://stackoverflow.com/questions/4314673/how-to-deselect-all-selected-rows-in-a-datagridview-control

반응형