@cookie 재현될 수 있는 소스코드를 제공해주시면 훨씬 수월하게 문제를 해결하 실 수 있습니다.
샘플 프로젝트를 GitHub Repository 또는 .zip 파일을 통해 제공해주시면 가장 좋고요.
GitHub 사용법은 시간이 될 때 꼭 알아보시면 좋겠습니다!!
GPT 4.0 답변 한번 남겨두겠습니다.
DataGridView
의 데이터 소스를 다시 바인딩하고 이전 정렬 상태가 그대로 유지되는 것으로 인해 색상이 잘못 적용되는 문제를 겪고 계신 것 같습니다. 정렬 후 셀의 값을 기준으로 색상을 변경할 때, 실제 데이터와 DataGridView
의 표시 순서가 맞지 않을 수 있기 때문입니다.
문제를 해결하기 위해 다음과 같은 방법을 시도해 볼 수 있습니다:
-
정렬 상태 초기화: 데이터를 다시 바인딩하기 전에
DataGridView
의 정렬 상태를 초기화할 수 있습니다. 이것은Sort
속성을 초기화하는 것과는 다릅니다.DataGridView
의SortedColumn
과SortOrder
속성을 사용하여 현재 정렬 상태를 확인하고,DataGridView.Sort
메서드를 사용하여 정렬을 초기화할 수 있습니다.if (dgvProduct.SortedColumn != null) { dgvProduct.Sort(dgvProduct.SortedColumn, ListSortDirection.Ascending); // 정렬을 초기 상태로 설정 dgvProduct.ClearSorting(); // 정렬 상태를 완전히 제거 }
-
색상 강조 로직 변경: 데이터 소스에서 직접 조건을 검사하여 결과를 데이터 테이블에 추가하고,
DataGridView
에 새로운 스타일을 적용하기 전에 다시 바인딩합니다. -
컬럼의
SortMode
변경: 모든 컬럼의SortMode
를NotSortable
로 설정하여 사용자가 수동으로 정렬하지 못하도록 할 수 있습니다. 이렇게 하면 데이터 소스를 다시 바인딩할 때 자동으로 정렬되는 것을 방지할 수 있습니다.foreach (DataGridViewColumn column in dgvProduct.Columns) { column.SortMode = DataGridViewColumnSortMode.NotSortable; }
-
새 데이터 바인딩 전 정렬 상태 확인: 색상을 변경하기 전에
DataGridView
의 현재 정렬 상태를 확인하고, 색상을 적용한 후에 같은 정렬 상태로 다시 정렬해 주는 방법도 고려해 볼 수 있습니다.또한 , 만약 정렬이 문제의 원인이라고 확신할 수 없다면,
DataGridView
의CellFormatting
이벤트를 사용하여 색상을 적용하는 것도 하나의 방법입니다. 이 이벤트는 각 셀이 화면에 그려질 때 호출되며, 여기서 조건에 따라 셀의 스타일을 동적으로 변경할 수 있습니다.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
이벤트를 사용하면 데이터가 다시 로드되거나 정렬될 때마다 자동으로 색상이 올바르게 적용됩니다. 이 방법을 사용하면 데이터를 로드하거나 다시 정렬할 때마다 색상을 직접 적용하는 추가 작업 없이 일관된 색상 적용을 보장할 수 있습니다.