반응형
개발 상황
그리드 컬럼에 Row의 순서를 의미하는 "No" 컬럼이 있는데, CustomDisplayText 이벤트로 데이터를 생성할 때 쓰레기 값이 바인딩 되는 문제이다.
e.ListSourceRowIndex가 특정 조건에서 -1 값을 반환하는 경우, 이 값이 +1 연산을 통해 0이 아닌 -2147483647로 변환된다. 이는 DevExpress의 CustomColumnDisplayText 이벤트에서 데이터가 없는 경우나 필터링된 상태에서 발생할 수 있는 현상이다.
이를 방지하려면, e.ListSourceRowIndex 값이 유효한지 확인한 후 처리하는 조건문을 추가해야 한다.
private void gridview_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
if (e.Column.FieldName == "No")
{
// ListSourceRowIndex가 유효한지 확인
if (e.ListSourceRowIndex >= 0)
{
e.DisplayText = (e.ListSourceRowIndex + 1).ToString();
}
else
{
e.DisplayText = string.Empty; // 잘못된 값일 경우 빈 문자열로 설정
}
}
}
코드 설명
- e.ListSourceRowIndex >= 0:
- ListSourceRowIndex 값이 유효한 데이터 행인지 확인
- ListSourceRowIndex == -1인 경우는 필터링되거나 데이터가 없는 상태를 의미
- e.DisplayText = string.Empty:
- ListSourceRowIndex가 유효하지 않은 경우, 기본값 대신 빈 문자열을 출력하여 -2147483647와 같은 잘못된 값이 표시되지 않도록 한다.
필터링 시 ListSourceRowIndex의 동작
- 필터링된 데이터에서 ListSourceRowIndex는 -1로 반환될 수 있습니다.
- 이 값에 +1을 적용하면, 특정 환경에서 int.MinValue + 1 → -2147483647로 변환되어 필터 영역에 표시됩니다.
적용 결과
위 코드를 적용하면, 잘못된 데이터 상태에서도 -2147483647와 같은 비정상적인 값이 필터나 셀에 표시되지 않습니다. 대신 빈 문자열이나 원하는 기본값으로 출력됩니다.
반응형
'IT개발 > 개발 일반' 카테고리의 다른 글
StreamJsonRpc.RemoteInvocationException: 인수에 중복된 분석기 인스턴스가 포함되어 있습니다. (0) | 2024.12.07 |
---|---|
Devexpress GridView cell old value, new value 체크하기 (0) | 2024.11.25 |
pdb 파일로 디버깅하는 법 (0) | 2024.11.25 |
Visual Studio 확장 프로그램 - CodeMaid 사용하여 사용성 높이기 (1) | 2024.11.15 |
MSSQL, Job 스케줄러 T-SQL로 생성하기 (1) | 2024.11.15 |
댓글