본문 바로가기
MES 문의 : 010-8015-0400
IT개발/개발 일반

Devexpress, 필터에 -2147483647 같은 쓰레기 값이 쓰여질 때

by all it 2024. 11. 26.
반응형

개발 상황

그리드 컬럼에 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; // 잘못된 값일 경우 빈 문자열로 설정
        }
    }
}

코드 설명

  1. e.ListSourceRowIndex >= 0:
    • ListSourceRowIndex 값이 유효한 데이터 행인지 확인
    • ListSourceRowIndex == -1인 경우는 필터링되거나 데이터가 없는 상태를 의미
  2. e.DisplayText = string.Empty:
    • ListSourceRowIndex가 유효하지 않은 경우, 기본값 대신 빈 문자열을 출력하여 -2147483647와 같은 잘못된 값이 표시되지 않도록 한다.

필터링 시 ListSourceRowIndex의 동작

  • 필터링된 데이터에서 ListSourceRowIndex는 -1로 반환될 수 있습니다.
  • 이 값에 +1을 적용하면, 특정 환경에서 int.MinValue + 1 → -2147483647로 변환되어 필터 영역에 표시됩니다.

적용 결과

위 코드를 적용하면, 잘못된 데이터 상태에서도 -2147483647와 같은 비정상적인 값이 필터나 셀에 표시되지 않습니다. 대신 빈 문자열이나 원하는 기본값으로 출력됩니다.

반응형

댓글