트레이닝 센터

데이터 상호작용

C1FlexGrid:마이닝 데이터 필터링

이번 편에서는 ComponentOne WinForms 표 양식 컨트롤을 사용하여 FlexGrid의 빅 데이터에 대한 필터링, 순서배열, 그룹 나누기, 통합, 프린트, 내보내기에 대해 설명합니다.


FlexGrid는 최초 필터링, 순서배열, 그룹 나누기 및 통합 등의 데이터 정리 및 마이닝 도구를 제공합니다. 사용자는 간단하게 원하는 인명이나 지역을 필터링할 수 있으며 매출액이 300만을 넘는 점포의 리스트 같은 복잡한 업무 로직을 끌어올 수도 있습니다. 또 순서배열, 그룹나누기와 통합 등을 통해 데이터의 의미가 더욱 분명하게 드러나도록 각종 KPI 데이터를 결합합니다. 이 밖에, FlexGrid는 표 양식 컨트롤이면서 보고서 기능도 제공하며, 프린트와 내보내기 기능을 통해 데이터 분석결과를 종이문서, Excel 또는 PDF파일로 출력할 수 있습니다.


1. FlexGrid자체정의필터

FlexGrid는 자체정의 필터로 전문적인 수치를 처리할 수 있습니다. 이 기능은 예를 들어 자체정의 필터의 필터링 색상, 지리 또는 자체정의 데이터 유형 방면 등에 추천합니다.
자체정의 필터를 만들려면 반드시 두 가지 유형을 만들어야 합니다. :

• 필터: 이 유형은 IC1ColumnFilter포트를 반드시 사용해야 합니다. 필터가 특정한 값에 응용되도록 지정할 수 있습니다. 필터를 리셋하고 필터의 변수를 조사하고 편집하는데 사용되는 에디터를 회수해야 합니다.

• 필터 에디터: 이 유형은 반드시 Control로부터 이어 받아, IC1ColumnFilterEditor의 포트를 사용해야 합니다. 해당 포트는 에디터를 초기화하고 필터에 변경 응용되는 사용방법을 지정할 수 있습니다.
자체 정의 필터의 샘플은 세 개의 자체정의필터를 포함합니다. 필터유형의 색상,일자/시간과 문자열의 값을 필터링 하는데 사용됩니다.
본편의 Demo에서는 각각 자체정의 한 필터색상,일자와 문자열을 필터링합니다. 구체적인 코드는 Demo의 CustomFilter파일 폴더에서 찾아볼 수 있습니다.

색상필터:


날짜필터:


문자열필터:


2. 데이터 소스 초기화 및 FlexGrid필터 설정

먼저 DataTable데이터 소스를 설정합니다. 5개 열에 데이터를 추가합니다. 그 다음 FlexGrid의 DataSource를 통해 데이터 소스를 바인딩합니다. 다시 OwnerDrawCell이벤트를 통해 Cell을 그립니다. 마지막으로 FlexGrid의Column Filter에 상기 자체정의 필터를 설정해줍니다. 구체적인 코드는 다음과 같습니다. :

public CustomFiltering()
        {
            InitializeComponent();

            //// add demo properties
            //AddProperty("AllowFiltering", _flex);

            dt.Columns.Add("문자열", typeof(String));
            dt.Columns.Add("일자", typeof(DateTime));
            dt.Columns.Add("정형", typeof(int));
            dt.Columns.Add("색상명", typeof(KnownColor));
            dt.Columns.Add("색상", typeof(Color));

 	String[] names =
            {
                "Rob Walters",
                "Janice Galvin",
                "Garrett Vargas",
                "David Campbell",
                "Lynn Tsoflias",
                "Linda Mitchell",
                "Jillian Carson",
                "Alan Brewer",
                "William Vong"
            };

var rnd = new Random();
            foreach (KnownColor kc in Enum.GetValues(typeof(KnownColor)))
            {
                Color clr = Color.FromKnownColor(kc);
                dt.Rows.Add(names[rnd.Next(0, 8)], DateTime.Today.AddDays(-rnd.Next(0, 100)), rnd.Next(0, 1000), kc, clr);
            }

            // configure grid
            _flex.DataSource = dt;
            _flex.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
            _flex.OwnerDrawCell += _flex_OwnerDrawCell;
            _flex.AllowEditing = false;
            _flex.AllowFiltering = true;
            // assign custom filters
            _flex.Cols["색상"].Filter = new ColorFilter();
            _flex.Cols["일자"].Filter = new DateFilter();
            _flex.Cols["색상명"].Filter = new StringFilter();

        }

3. FlexGrid의 Cell다시 그리기

FlexGrid의 OwnerDrawCell이벤트를 이용하여 Cell을 다시 작성합니다. 코드는 다음과 같습니다. :


void _flex_OwnerDrawCell(object sender, C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
        {
            if (_flex[e.Row, e.Col] is Color)
            {
                var clr = (Color)_flex[e.Row, e.Col];
                if (clr != null)
                {
                    e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Background | C1.Win.C1FlexGrid.DrawCellFlags.Border);
                    var rc = e.Bounds;
                    rc.Inflate(-4, -2);
                    using (var br = new SolidBrush(clr))
                    {
                        e.Graphics.FillRectangle(br, rc);
                        e.Graphics.DrawRectangle(Pens.Black, rc);
                    }
                }
            }
        }

4. FlexGrid의 필터, 순서배열 및 그룹 나누기 시연

상기 코드에 따라 FlexGrid는 필터를 통해 순서배열, 그룹 나누기 및 통합 등의 기능을 결합하여 각종 KPI데이터를 더욱 분명하게 나타냅니다. 결과는 다음 그림과 같습니다. :


해당 유형의 정의는 다음의 코드와 같습니다. 구체적인 코드의 실현은 글 끝의 Demo의FlexHyperlink 유형을 참고할 수 있습니다.


5. FlexGrid프린트

FlexGrid는 표 양식 컨트롤일 뿐만 아니라 사용자를 위해 보고서 기능도 제공하고 있습니다. 프린트 기능을 통해 데이터 분석결과를 프린트로 생성합니다. 이 때, FlexGrid.PrintGrid기능을 이용하면 쉽게 프린트 할 수 있습니다.


코드예시:

this._flex.PrintGrid("CustomFilter", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);

프린트 미리 보기 결과는 다음과 같습니다. :



샘플 다운로드



한국 그레이프시티 공식카페에서 기술지원을 받으실 수 있습니다.
이메일을 통해서도 기술지원을 받으실 수 있습니다.