DevExpress XtraGrid 컬럼 필터(Filter) 변경에 대한 이벤트 처리


DevExpress의 XtraGrid 컨트롤은 매우 뛰어난 기능을 제공하는 Grid Control 입니다.

여러가지 기능 중에서 필터(Filter) 기능은 정말 편리하게 사용할 수 있는 기능입니다.
컬럼 필터를 할 때 다양한 옵션을 줄 수 있으며, 다중 필터를 통해 보다 효과적으로 Grid 행(Row)에 대해 필터링을 할 수 있습니다.

Footer에 SummaryItem을 지정했다면 필터 된 결과로 Summary가 자동으로 계산되어 나타납니다.

가끔 Grid Control에서 필터 된 결과의 GridView 내용만으로 별도의 작업을 처리해야 할 경우 어떻게 전체 Grid 행(Row)에서 필터 된 Grid 행(Row)만 가져올 수 있을까요?

이번 글에서는 DevExpress XtraGrid 컬럼 필터(Filter) 변경에 대한 이벤트 처리 방법에 대해 알아보겠습니다.

XtraGrid 컨트롤의 필터(Filter) 지정에 대한 이벤트 처리 시나리오

1. 아래 XtraGrid 컨트롤에서 납기 준수율과 평균 납기일을 추가로 계산하도록 되어 있습니다.

2. 일반적인 컬럼(Column)의 합계(Sum), 평균(Average), 건수(Count) 등은 컬럼 속성으로 Footer에 자동으로 표기할 수 있습니다.

3. 하지만 조건이 필요한 계산은 별도로 계산 구문을 프로그램으로 추가해 주어야 합니다.

DevExpress XtraGrid 컬럼 필터(Filter) 변경에 대한 이벤트 처리 1

4. 만약 작업 중인 XtraGird에서 컬럼의 특정 값으로 필터를 했다면 납기 준수율과 평균 납기일은 어떻게 될까요?

5. 필터 변경에 대한 별도의 이벤트 처리를 하지 않는다면 필터 결과로 XtraGrid의 출력 내용은 변경되었지만 납기 준수율과 평균 납기일은 아무런 변화가 없게 됩니다.

DevExpress XtraGrid 컬럼 필터(Filter) 변경에 대한 이벤트 처리 2

6. 필터 결과에 따라 화면에 나타나는 XtraGrid의 행(Row)에 대해서만 납기 준수율과 평균 납기일을 재 계산하기 위해서는 별도의 이벤트 처리를 해 주어야 합니다.

7. 다음 단락에서 컬럼의 필터가 변경되었을 때 처리하는 이벤트에 대해서 알아보겠습니다.

XtraGrid GridView의 ColumnFilterChanged 이벤트 처리

▶ XtraGrid 컨트롤에서 칼럼에 대한 필터(Filter)를 지정하면 ColumnFilterChanged 이벤트가 발생하게 됩니다.

▶ ColumnFilterChanged 이벤트 처리에서 필터 된 결과에 대한 납기 준수율과 평균 납기일을 재 계산하는 방법에 대해 설명해 보겠습니다.

1. DevExpress.XtraGrid.Views.Grid.GridView의 속성 이벤트 중에서 ColumnFilterChanged를 찾아 더블 클릭 해 줍니다.

DevExpress XtraGrid 컬럼 필터(Filter) 변경에 대한 이벤트 처리 3

2. 그럼 아래와 같이 해당 이벤트에 대한 처리 구문을 작성해 주면 됩니다.

3. GridView 클래스(Class)를 사용하기 위해 using DevExpress.XtraGrid.Views.Grid; 선언 해 줍니다.

4. object sender에는 필터링 된 결과만 가지고 있습니다. 이것을 view 이름의 GridView에 넣어 줍니다.

5. 이제 view를 이용해서 원하는 작업을 처리하면 됩니다.

using DevExpress.XtraGrid.Views.Grid;
 
  private void gvJpInput_ColumnFilterChanged(object sender, EventArgs e)
  {
      decimal OkSum = 0m, Days2Sum = 0m;
 
      //필터링 된 결과의 GridView만 가져와서 처리함
      GridView view = sender as GridView;
 
      for (int i = 0; i < view.DataRowCount; i++)
      {
          OkSum += int.Parse(view.GetRowCellValue(i, “colDeliveryOk”).ToString());
          Days2Sum += int.Parse(view.GetRowCellValue(i, “colDeliveryDays2”).ToString());
      }
 
      //납기준수율 계산
      textDeliveryRate.Text = (OkSum / view.DataRowCount).ToString(“N3”);
      //평균납기일 계산
      textDeliveryDays2.Text = (Days2Sum / view.DataRowCount).ToString(“N3”);
 
  }
 

6. 예제에서는 colDeliveryOk 컬럼과 colDeliveryDays2 컬럼을 Sum 한 다음 필터 된 행(Row)의 갯수로 나누어 납기 준수율과 평균 납기일을 계산해 주었습니다.

마무리

XtraGrid 전체에 대한 합계나 평균 또는 그룹에 대한 합계나 평균은 별도의 구문 처리 없이 간단하게 컬럼 속성 정의로 표현이 가능합니다.

하지만 이번 글에서 소개한 것과 같이 필터 된 결과에 대한 별도의 계산을 적용하기 위해서는 필터 변경에 대한 이벤트에서 처리를 해 주어야 합니다.

알아두면 꽤 효율적으로 사용할 수 있는 기능입니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기