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

WinForms Datagrid를 필터링하기 위해 검색 상자를 추가하는 방법 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

WinForms Datagrid를 필터링하기 위해 검색 상자를 추가하는 방법

페이지 정보

작성자 GrapeCity 작성일 2023-08-23 16:38 조회 604회 댓글 0건

본문

첨부파일

데이터 기반 세상에서 우리는 일반적으로 데이터 그리드를 사용해 대규모 데이터 집합을 관리합니다. 이러한 그리드 내에 검색 및 필터링 기능을 통합하여 데이터를 효율적으로 탐색하고 분석할 수 있습니다.


구현을 위해 WinForms 응용 프로그램에서 FlexGrid 컨트롤을 사용하는 사례를 가정하겠습니다.

그리드는 ComponentOne 샘플과 함께 제공된 NWind 데이터베이스의 Products Table(표)에 바인딩됩니다. 


이번 블로그에서는 C1FlexGridSearchPanel 컨트롤을 검색 상자로 사용하여 FlexGrid에 검색 기능을 통합하는 방법을 보여 줍니다.

또한 C1DataFilter 컨트롤을 활용해 확장된 필터링 기능을 그리드에 추가하고 사용자가 자신의 기본 설정을 기반으로 표시된 데이터를 세분화할 수 있도록 합니다. 


샘플을 다운로드하여 따라해 보세요! 



검색 패널을 사용하여 데이터 그리드 필터링 


ComponentOne WinForms 제품군에서 FlexGrid 컨트롤에 필터링(또는 검색) 기능을 추가하는 특수 컨트롤인 C1FlexGridSearchPanel이 있습니다.


이 컨트롤은 검색 텍스트를 강조 표시하고 해당 텍스트가 포함된 레코드를 필터링합니다.  


검색 패널은 요구 사항에 따라 설정할 수 있는 다양한 설정을 제공합니다.

예를 들어, SearchMode 속성에 따라 검색이 트리거되는 방식(자동으로 또는 검색 버튼을 누를 때)이 결정됩니다.


또한 SearchDelay 속성을 설정하여 검색이 자동으로 수행되는 시간 간격을 지정할 수도 있습니다.


2023 v1 릴리스에서는 C1FlexGridSearchPanel 컨트롤에 "모든 항목 강조 표시"라는 새로운 기능을 도입했습니다.


이를 통해 사용자는 그리드 내 검색어의 모든 인스턴스를 쉽게 발견하고 시각화할 수 있습니다.

해당 기능은 데이터 배포에 대한 편리한 개요를 제공하고, 사용자 경험을 크게 향상시킵니다.


다음은 WinForms용 FlexGrid에 검색 패널을 추가하는 단계입니다.


1. WinForms 응용 프로그램을 만들고,

 NuGet에서 'C1.Win.C1FlexGrid' 및 'C1.Win.C1FlexGrid.SearchPanel' 패키지를 설치합니다.

WinForms Datagrid 필터


2. FlexGrid 컨트롤 및 FlexGridSearchPanel을 도구 상자의 양식 디자이너 창에 추가합니다.

WinForms Datagrid 필터 

3. FlexGrid 컨트롤을 원하는 데이터 소스(예: NWind 데이터베이스의 Products 표)에 바인딩합니다.

다음 코드에 표시된 대로 FlexGrid를 양식의 로드 이벤트 핸들러에 있는 데이터 소스에 바인딩했습니다.
private void Form1_Load(object sender, EventArgs e)
{
    var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"\ComponentOne Samples\Common";
    var dataAdapter = new OleDbDataAdapter("select ProductID, ProductName, SupplierID, QuantityPerUnit, " +
        "CategoryID, UnitPrice from Products", string.Format(@"provider=Microsoft.ACE.OLEDB.12.0;data source={0}\c1nwind.mdb;", path));
    _dataTable = new DataTable();
    dataAdapter.Fill(_dataTable);
    c1FlexGrid1.DataSource = _dataTable;
}

4. FlexGrid의 C1FlexGridSearchPanel 속성을 FlexGrid의 속성 창에 있는 추가된 C1FlexGridSearchPanel의 인스턴스로 설정합니다. 

WinForms Datagrid 필터


5. FlexGrid 검색 패널을 'All'로 설정합니다.  


셀에 있는 검색된 문자열의 모든 인스턴스가 강조 표시됩니다.


또한 셀의 첫 번째 일치 항목만 강조 표시하거나 적절한 'OnlyFirst' 또는 'None' 열거형 옵션을 선택하여 강조 표시하지 않도록 선택할 수 있습니다.

c1FlexGridSearchPanel1.HighlightSearchResultsMode = C1.Win.C1FlexGrid.SearchHighlightMode.All;


응용 프로그램을 실행하고 검색 패널 기능을 테스트합니다.


검색 상자에 검색어를 입력합니다.


FlexGrid에서 자동으로 일치하는 데이터를 필터링하고 표시합니다.

WinForms Datagrid 필터 


데이터 필터를 사용하여 데이터 그리드 필터링


그리드의 데이터 필터링을 통해 사용자는 관심 있는 특정 정보의 범위를 좁혀 생산성과 데이터 탐색 기능을 향상시킬 수 있습니다.


이를 통해 막대한 데이터 집합을 효율적으로 탐색하고 분석할 수 있습니다.


이 요구 사항은 광범위한 필터링 기능을 제공하는 C1DataFilter 컨트롤을 사용하여 달성할 수 있습니다.


데이터 소스의 속성을 기반으로 다양한 유형의 필터를 자동으로 생성합니다.


또한, 사용자 정의 필터를 생성하고 런타임 시 기본 필터 편집기를 동적으로 교체할 수 있습니다.

이는 사용자에게 정확한 검색을 수행하고 필요한 데이터를 가지고 올 수 있는 기능을 제공합니다.  


위 응용 프로그램에서 FlexGrid에 데이터 필터링 기능을 구현하려면 다음 단계를 따라 보세요.


1. NuGet에서 C1.Win.DataFilter 패키지를 설치한 뒤,
C1DataFilter 컨트롤을 도구 상자의 디자이너 창에 추가합니다.

WinForms Datagrid 필터


2. 양식의 로드 이벤트 핸들러에서 C1DataFilter 컨트롤의 데이터 소스를 FlexGrid 컨트롤의 데이터 소스와 동일하게 설정합니다.

c1DataFilter1.DataSource = _dataTable;


3. C1DataFilter의 AutoGenerateFilters 속성을 true로 설정하여 데이터 소스에 존재하는 필드의 유형에 따라 기본 필터를 만듭니다.

WinForms Datagrid 필터 

4. DataFilter의 FilterAutoGenerating 이벤트를 구독하여 자동으로 생성된 필터를 수정합니다.


RangeFilter의 최소/최대값 및 CheckListFilter의 체크리스트 항목과 같은 필터링 매개 변수를 지정했습니다.

private void c1DataFilter1_FilterAutoGenerating(object sender, C1.DataFilter.FilterAutoGeneratingEventArgs e)
        {
            switch (e.Property.Name)
            {
                case "ProductID":
                    var prodIdFilter = (C1.Win.DataFilter.RangeFilter)e.Filter;
                    prodIdFilter.Maximum = _dataTable.AsEnumerable().Max(x => x.Field<int>("ProductID"));
                    prodIdFilter.Minimum = _dataTable.AsEnumerable().Min(x => x.Field<int>("ProductID"));
                    prodIdFilter.Increment = 1;
                    break;
                case "ProductName":
                    var productNameFilter = (C1.Win.DataFilter.ChecklistFilter)e.Filter;
                    productNameFilter.ShowSearchBox = true;
                    productNameFilter.SelectAll();
                    break;
                case "SupplierID":
                    var suppIdFilter = (C1.Win.DataFilter.RangeFilter)e.Filter;
                    suppIdFilter.Maximum = _dataTable.AsEnumerable().Max(x => x.Field<int>("SupplierID"));
                    suppIdFilter.Minimum = _dataTable.AsEnumerable().Min(x => x.Field<int>("SupplierID"));
                    suppIdFilter.Increment = 1;
                    break;
                case "QuantityPerUnit":
                    var qpuFilter = (C1.Win.DataFilter.ChecklistFilter)e.Filter;
                    qpuFilter.ShowSearchBox = true;
                    qpuFilter.SelectAll();
                    break;
                case "CategoryID":
                    var categoryIdFilter = (C1.Win.DataFilter.RangeFilter)e.Filter;
                    categoryIdFilter.Maximum = _dataTable.AsEnumerable().Max(x => x.Field<int>("CategoryID"));
                    categoryIdFilter.Minimum = _dataTable.AsEnumerable().Min(x => x.Field<int>("CategoryID"));
                    categoryIdFilter.Increment = 1;
                    break;
                case "UnitPrice":
                    var unitPriceFilter = (C1.Win.DataFilter.RangeFilter)e.Filter;
                    unitPriceFilter.Maximum = Decimal.ToDouble(_dataTable.AsEnumerable().Max(x => x.Field<decimal>("UnitPrice")));
                    unitPriceFilter.Minimum = Decimal.ToDouble(_dataTable.AsEnumerable().Min(x => x.Field<decimal>("UnitPrice")));
                    unitPriceFilter.Increment = 0.01;
                    break;
                default: break;
            }
        }


블로그 샘플 응용 프로그램에 몇 가지 기능을 추가했습니다.

여기에는 FlexGrid에 적용된 필터를 저장하고 필요에 따라 저장된 필터를 로드하는 기능이 포함됩니다.


이와 관련된 자세한 내용은 문서를 통해 확인해 보세요!


또한 C1DataFilter를 기반으로 FlexGrid 데이터의 자동 필터링 활성화 또는 비활성화하는 옵션과 사용자가 클릭하여 그리드에 필터링을 명시적으로 적용할 수 있는 전용 버튼을 추가했습니다.


응용 프로그램을 실행하고 데이터 필터링 기능을 테스트합니다.

WinForms Datagrid 필터


강력한 검색 및 필터링 기능을 FlexGrid에 통합하여 WinForms 응용 프로그램의 잠재력을 극대화하였습니다.


사용자가 방대한 양의 데이터 집합 내를 쉽게 이동하고, 유용한 통계를 생성하고 데이터 검색, 강조 표시 및 필터링 기능을 사용해, 정보를 바탕으로 결정을 내릴 수 있도록 합니다.


이러한 강력한 기능을 사용하여 소비자가 데이터를 이용하는 방식을 변화시켜 보시길 바랍니다.






지금 바로 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.