Winforms원폼 C1FlexGrid:마이닝 데이터 필터링
페이지 정보
작성자 GrapeCity 작성일 2020-09-22 14:33 조회 1,605회 댓글 0건본문
첨부파일
관련링크
이번 편에서는 ComponentOne WinForms 표 양식 컨트롤을 사용하여 FlexGrid의 빅 데이터에 대한 필터링, 순서배열, 그룹 나누기, 통합, 프린트, 내보내기에 대해 설명합니다.
FlexGrid는 최초 필터링, 순서배열, 그룹 나누기 및 통합 등의 데이터 정리 및 마이닝 도구를 제공합니다. 사용자는 간단하게 원하는 인명이나 지역을 필터링할 수 있으며 매출액이 300만을 넘는 점포의 리스트 같은 복잡한 업무 로직을 끌어올 수도 있습니다. 또 순서배열, 그룹나누기와 통합 등을 통해 데이터의 의미가 더욱 분명하게 드러나도록 각종 KPI 데이터를 결합합니다.
이 밖에, FlexGrid는 표 양식 컨트롤이면서 보고서 기능도 제공하며, 프린트와 내보내기 기능을 통해 데이터 분석결과를 종이문서, Excel 또는 PDF파일로 출력할 수 있습니다.
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();
}
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 유형을 참고할 수 있습니다.
FlexGrid는 표 양식 컨트롤일 뿐만 아니라 사용자를 위해 보고서 기능도 제공하고 있습니다.
프린트 기능을 통해 데이터 분석결과를 프린트로 생성합니다.
이 때, FlexGrid.PrintGrid기능을 이용하면 쉽게 프린트 할 수 있습니다.
코드예시:
this._flex.PrintGrid("CustomFilter", C1.Win.C1FlexGrid.PrintGridFlags.ShowPreviewDialog);
프린트 미리 보기 결과는 다음과 같습니다. :
댓글목록
등록된 댓글이 없습니다.