C# Datagridview column sort 후 다시 datasoure 바인딩 질문

@cookie 재현될 수 있는 소스코드를 제공해주시면 훨씬 수월하게 문제를 해결하 실 수 있습니다.
샘플 프로젝트를 GitHub Repository 또는 .zip 파일을 통해 제공해주시면 가장 좋고요.

GitHub 사용법은 시간이 될 때 꼭 알아보시면 좋겠습니다!!

GPT 4.0 답변 한번 남겨두겠습니다.


DataGridView의 데이터 소스를 다시 바인딩하고 이전 정렬 상태가 그대로 유지되는 것으로 인해 색상이 잘못 적용되는 문제를 겪고 계신 것 같습니다. 정렬 후 셀의 값을 기준으로 색상을 변경할 때, 실제 데이터와 DataGridView의 표시 순서가 맞지 않을 수 있기 때문입니다.

문제를 해결하기 위해 다음과 같은 방법을 시도해 볼 수 있습니다:

  1. 정렬 상태 초기화: 데이터를 다시 바인딩하기 전에 DataGridView의 정렬 상태를 초기화할 수 있습니다. 이것은 Sort 속성을 초기화하는 것과는 다릅니다. DataGridViewSortedColumnSortOrder 속성을 사용하여 현재 정렬 상태를 확인하고, DataGridView.Sort 메서드를 사용하여 정렬을 초기화할 수 있습니다.

    if (dgvProduct.SortedColumn != null)
    {
        dgvProduct.Sort(dgvProduct.SortedColumn, ListSortDirection.Ascending); // 정렬을 초기 상태로 설정
        dgvProduct.ClearSorting(); // 정렬 상태를 완전히 제거
    }
    
  2. 색상 강조 로직 변경: 데이터 소스에서 직접 조건을 검사하여 결과를 데이터 테이블에 추가하고, DataGridView에 새로운 스타일을 적용하기 전에 다시 바인딩합니다.

  3. 컬럼의 SortMode 변경: 모든 컬럼의 SortModeNotSortable로 설정하여 사용자가 수동으로 정렬하지 못하도록 할 수 있습니다. 이렇게 하면 데이터 소스를 다시 바인딩할 때 자동으로 정렬되는 것을 방지할 수 있습니다.

    foreach (DataGridViewColumn column in dgvProduct.Columns)
    {
        column.SortMode = DataGridViewColumnSortMode.NotSortable;
    }
    
  4. 새 데이터 바인딩 전 정렬 상태 확인: 색상을 변경하기 전에 DataGridView의 현재 정렬 상태를 확인하고, 색상을 적용한 후에 같은 정렬 상태로 다시 정렬해 주는 방법도 고려해 볼 수 있습니다.

    또한 , 만약 정렬이 문제의 원인이라고 확신할 수 없다면, DataGridViewCellFormatting 이벤트를 사용하여 색상을 적용하는 것도 하나의 방법입니다. 이 이벤트는 각 셀이 화면에 그려질 때 호출되며, 여기서 조건에 따라 셀의 스타일을 동적으로 변경할 수 있습니다.

    private void dgvProduct_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (e.ColumnIndex == dgvProduct.Columns["sub_id"].Index)
        {
            string value = dgvProduct.Rows[e.RowIndex].Cells["sub_id"].Value as string;
            if (value == "9999")
                e.CellStyle.BackColor = Color.Blue;
            else
                e.CellStyle.BackColor = Color.White;
        }
    }
    

    CellFormatting 이벤트를 사용하면 데이터가 다시 로드되거나 정렬될 때마다 자동으로 색상이 올바르게 적용됩니다. 이 방법을 사용하면 데이터를 로드하거나 다시 정렬할 때마다 색상을 직접 적용하는 추가 작업 없이 일관된 색상 적용을 보장할 수 있습니다.

2개의 좋아요