! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

FlexGrid 데이터 필터링 - 필터 작업 > 온라인 스터디

본문 바로가기

ComponentOne

온라인 스터디

Winforms윈폼 FlexGrid 데이터 필터링 - 필터 작업

페이지 정보

작성자 GCK써니 작성일 2022-04-21 09:23 조회 742회 댓글 0건

본문

그리드 필터링을 사용하면 열에 적용된 특정 조건에 따라 표시할 레코드의 범위를 좁힐 수 있습니다. 특정 유형의 레코드만 표시하여 데이터를 쉽게 분석할 수 있으므로, 빅테이터 셋의 경우 특히 유용합니다.
본문에서는 아래와 같은 ​필터 작업​에 대하여 살펴보겠습니다. 
  • 필터 허용
  • 코드 기반 필터링
    • 특정 열에만 필터 활성화 하는 방법
    • 특정 열에 필터 조건 설정하는 방법
  • 사용자 정의 필터링
  • 필터링 제거



샘플 프로젝트 생성

각각의 내용을 살펴보기에 앞서, 실습을 진행할 샘플 프로젝트를 생성합니다.
  1. 먼저 Form에 C1FlexGrid 컨트롤을 불러옵니다.a54bc712c734ac061bff6237be49d739_1650499578_7595.png

  2. 샘플 데이터를 바인딩합니다. 샘플 데이터로는 \Documents\ComponentOne Samples\Common 디렉터리에 있는 C1NWind.mdb 파일에 포함된 "Order" 데이터를 사용하겠습니다.
    a54bc712c734ac061bff6237be49d739_1650499621_4961.gif
    상세한 설명은 [WinForms] FlexGrid 시작하기에서 확인하실 수 있습니다.

  3. .cs 파일에 아래의 코드가 자동으로 생성된 것을 확인할 수 있으며, 프로그램 실행 시 C1FlexGrid에 연결한 "Order" 데이터가 보여집니다.
    // TODO: 이 코드는 데이터를 'c1NWindDataSet.Order' 테이블에 로드합니다. 필요 시 이 코드를 이동하거나 제거할 수 있습니다.
    this.orderTableAdapter.Fill(this.c1NWindDataSet.Order);
    a54bc712c734ac061bff6237be49d739_1650500701_6839.png


 
필터 작업

그리드의 데이터 필터링은 하기 두 가지 방법으로 수행할 수 있습니다.
  • 필터 행
    필터 행은 필터링 기준을 표시하기 위한 전용 행으로, 열 해더 바로 아래에 나타납니다. 따라서 사용자는 항상 필터링된 열과 현재 필터링 기준을 볼 수 있습니다. 다만, 필터 행을 표시하기 위한 추가적인 화면 공간이 사용됩니다. FlexGrid에서 사용자 정의 구현을 동해 쉽게 필터 행을 사용하실 수 있습니다.

    a54bc712c734ac061bff6237be49d739_1650500887_8075.png

  • 헤더 기반 필터
    열 헤더 셀에 필터링 아이콘이 표시되어, 드롭다운에서 필터 지정 옵션을 제공하고, 특정 열에 필터가 적용되어있는지 여부가 나타납니다. 헤더 기반 필터는 C1FlexGrid에서 그리드의 AllowFiltering 속성을 사용하여 간단하게 설정할 수 있으며, 사용자의 필요에 따라 유연하게 커스터마이징할 수 있습니다. 자세한 내용은 이어지는 본문에서 살펴보겠습니다.

필터 허용


FlexGrid에서 필터링은 C1FlexGrid.AllowFiltering 속성true로 설정하여 활성화할 수 있습니다.
c1FlexGrid1.AllowFiltering = true;

이렇게 하면 그리드의 모든 열에서 기본 ColumnFilter가 활성화됩니다. ColumnFilter를 사용하면 런타임 시 ValuFilter 및 ConditionalFilter 중 하나를 선택하여 적용할 수 있습니다.

a54bc712c734ac061bff6237be49d739_1650500990_4371.gif
 
 

코드 기반 필터링

그리드의 AllowFiltering 속성은 그리드 필터링을 가능하게 하고, 가장 일반적인 경우에 사용할 수 있으나, 필요에 따라 필터 옵션을 추가로 미세 조정해야 하는 경우가 있습니다. 이때, 개별 열의 AllowingFilter 속성 및 Filter 속성을 수정하여 이를 수행할 수 있습니다. 두가지 예시를 살펴보겠습니다.
 

▶ 특정 열에 필터 활성화

코드를 사용하여, 데이터 유형이 문자열인 열에 대해서만 필터를 활성화해보겠습니다.
  1. 먼저 그리드에 필터를 허용합니다.
    c1FlexGrid1.AllowFiltering = true;
  2. 조건문을 사용하여 열을 하나씩 탐색합니다. 조건문 내부에 다음 코드를 삽입합니다.
    - 열의 데이터 타입이 string인 경우: 해당 열의 AllowFiltering 속성 값을 Default로 설정하여, ColumnFilter를 활성화 합니다.
    - 열의 데이터 타입이 string이 아닌 경우: 해당 열의 AllowFiltering 속성 값을 None으로 설정하여, 해당 열에 대한 필터링을 비활성화 합니다.
    foreach(Column c in c1FlexGrid1.Cols)
    {
        c.AllowFiltering = c.DataType == typeof(string)
            ? AllowFiltering.Default
            : AllowFiltering.None;
    }
  3. 실행 결과, 데이터 유형이 문자열인 열에 대해서만 필터가 적용되어었음을 확인하실 수 있습니다.

▶ 특정 열에 필터 조건 설정

코드를 사용하여 필터 조건을 설정할 수 있습니다.
  1. 먼저 그리드에 필터를 허용합니다.
    c1FlexGrid1.AllowFiltering = true;
  2. 새 ConditionalFilter 개체를 생성합니다.
    ConditionFilter filter = new ConditionFilter();
  3. Operator 속성과 Parameter 속성을 사용하여, 필터의 첫번째 조건을 설정합니다. 예시에서는 "Visa"와 동일한 항목만 보여지도록 필터 조건을 설정하였습니다.
    filter.Condition1.Operator = ConditionOperator.Equals;
    filter.Condition1.Parameter = "Visa";
  4. "PaymentType" 열에, 설정한 필터를 할당합니다.
    c1FlexGrid1.Cols["PaymentType"].Filter = filter;
  5. 필터를 적용합니다.
    c1FlexGrid1.ApplyFilters();
  6. 실행 결과, 다음과 같이 "PaymentType" 열에 입력된 값이 "Visa"인 항목들만 보여지는 것을 확인하실 수 있습니다.

    a54bc712c734ac061bff6237be49d739_1650502936_8416.png


사용자 정의 필터링

기본적으로 그리드에 필터링이 적용되면, 필터 기준에 맞지 않는 데이터가 포함된 행은 숨겨지고 필터 기준에 맞는 데이터만 화면에 보여집니다. 그러나 필요에 따라 필터링 된 데이터를 보여주는 방식을 커스터마이징해야 하는 경우가 있는데, 이때 FlexGrid의 BeforeFilter 이벤트AfterFilter 이벤트를 사용할 수 있습니다.

필터 조건에 맞지 않는 행을 숨기는 대신, 해당 행의 배경색과 폰트색상을 각각 회색과 진회색으로 변경하도록 설정해보겠습니다.
  1. 먼저 필터 조건에 맞지 않는 행에 적용할 스타일을 적용합니다.
    // 필터에 의해 제외된 행에 대한 스타일을 생성합니다.
    var cs = c1FlexGrid1.Styles.Add( "filteredOut" );
    cs.BackColor = Color.LightGray;
    cs.ForeColor = Color.DarkGray;
  2. BeforeFilter 이벤트를 정의합니다.
    private void C1FlexGrid1_BeforeFilter(object sender, CancelEventArgs e)
    {
        // 컨트롤이 업데이트될 때까지 자체 업데이트를 방지하여 성능을 유지합니다.
        c1FlexGrid1.BeginUpdate();
    }
  3. AfterFilter 이벤트를 정의합니다.
    private void C1FlexGrid1_AfterFilter(object sender, EventArgs e)
    {
        // 필터링된 행을 표시하는 데 사용되는 스타일을 가져옵니다.
        var cs = c1FlexGrid1.Styles["filteredOut"];
    
        // 필터링된 행에 대하여, filteredOut 스타일을 적용합니다.
        for (int r = c1FlexGrid1.Rows.Fixed; r < c1FlexGrid1.Rows.Count; r++)
        {
            var row = c1FlexGrid1.Rows[r];
            if (row.Visible)
            {
                // 필터링 되지 않은 행에 대해서는 스타일을 초기화합니다.
                row.Style = null;
            }
            else
            {
                // 필터링된 행이 다시 보여지도록 한 후, 스타일을 적용합니다.
                row.Visible = true;
                row.Style = cs;
            }
        }
    
        // 컨트롤 업데이트를 재개합니다.
        c1FlexGrid1.EndUpdate();
    }
  4. 코드를 실행한 후 필터를 적용해보면, 필터 조건에 맞지 않는 행이 숨겨지는 대신, 설정한 색상으로 변경되는 것을 확인하실 수 있습니다.

    a54bc712c734ac061bff6237be49d739_1650503195_8293.gif
     
필터링 제거

사용자는 각 컬럼 필터 UI에 주어진 "Clear" 옵션을 사용하여, 런타임 시 컬럼 필터링을 제거할 수 있습니다. 또는 하기 코드와 같이 ​FlexGrid의 FilterDefinition 속성​에 빈 문자열을 전달하여, 전체 그리드의 필터링을 제거할 수 있습니다.
// 필터 정의를 빈 문자열로 설정하여 필터링을 제거합니다.
c1FlexGrid1.FilterDefinition = string .Empty;


지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!

c1.png

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.