WinForms Datagrid를 필터링하기 위해 검색 상자를 추가하는 방법
페이지 정보
작성자 GrapeCity 작성일 2023-08-23 16:38 조회 604회 댓글 0건본문
첨부파일
관련링크
데이터 기반 세상에서 우리는 일반적으로 데이터 그리드를 사용해 대규모 데이터 집합을 관리합니다. 이러한 그리드 내에 검색 및 필터링 기능을 통합하여 데이터를 효율적으로 탐색하고 분석할 수 있습니다.
구현을 위해 WinForms 응용 프로그램에서 컨트롤을 사용하는 사례를 가정하겠습니다.
그리드는 ComponentOne 샘플과 함께 제공된 NWind 데이터베이스의 Products Table(표)에 바인딩됩니다.
이번 블로그에서는 컨트롤을 검색 상자로 사용하여 FlexGrid에 검색 기능을 통합하는 방법을 보여 줍니다.
또한 컨트롤을 활용해 확장된 필터링 기능을 그리드에 추가하고 사용자가 자신의 기본 설정을 기반으로 표시된 데이터를 세분화할 수 있도록 합니다.
검색 패널을 사용하여 데이터 그리드 필터링
ComponentOne WinForms 제품군에서 FlexGrid 컨트롤에 필터링(또는 검색) 기능을 추가하는 특수 컨트롤인 C1FlexGridSearchPanel이 있습니다.
이 컨트롤은 검색 텍스트를 강조 표시하고 해당 텍스트가 포함된 레코드를 필터링합니다.
검색 패널은 요구 사항에 따라 설정할 수 있는 다양한 설정을 제공합니다.
예를 들어, 속성에 따라 검색이 트리거되는 방식(자동으로 또는 검색 버튼을 누를 때)이 결정됩니다.
또한 속성을 설정하여 검색이 자동으로 수행되는 시간 간격을 지정할 수도 있습니다.
2023 v1 릴리스에서는 C1FlexGridSearchPanel 컨트롤에 "모든 항목 강조 표시"라는 새로운 기능을 도입했습니다.
이를 통해 사용자는 그리드 내 검색어의 모든 인스턴스를 쉽게 발견하고 시각화할 수 있습니다.
해당 기능은 데이터 배포에 대한 편리한 개요를 제공하고, 사용자 경험을 크게 향상시킵니다.
다음은 WinForms용 FlexGrid에 검색 패널을 추가하는 단계입니다.
1. WinForms 응용 프로그램을 만들고,
NuGet에서 '' 및 '' 패키지를 설치합니다.
2. FlexGrid 컨트롤 및 FlexGridSearchPanel을 도구 상자의 양식 디자이너 창에 추가합니다.
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; }
5. FlexGrid 검색 패널을 'All'로 설정합니다.
셀에 있는 검색된 문자열의 모든 인스턴스가 강조 표시됩니다.
또한 셀의 첫 번째 일치 항목만 강조 표시하거나 적절한 'OnlyFirst' 또는 'None' 열거형 옵션을 선택하여 강조 표시하지 않도록 선택할 수 있습니다.
c1FlexGridSearchPanel1.HighlightSearchResultsMode = C1.Win.C1FlexGrid.SearchHighlightMode.All;
응용 프로그램을 실행하고 검색 패널 기능을 테스트합니다.
검색 상자에 검색어를 입력합니다.
FlexGrid에서 자동으로 일치하는 데이터를 필터링하고 표시합니다.
데이터 필터를 사용하여 데이터 그리드 필터링
그리드의 데이터 필터링을 통해 사용자는 관심 있는 특정 정보의 범위를 좁혀 생산성과 데이터 탐색 기능을 향상시킬 수 있습니다.
이를 통해 막대한 데이터 집합을 효율적으로 탐색하고 분석할 수 있습니다.
이 요구 사항은 광범위한 필터링 기능을 제공하는 C1DataFilter 컨트롤을 사용하여 달성할 수 있습니다.
데이터 소스의 속성을 기반으로 다양한 유형의 필터를 자동으로 생성합니다.
또한, 사용자 정의 필터를 생성하고 런타임 시 기본 필터 편집기를 동적으로 교체할 수 있습니다.
이는 사용자에게 정확한 검색을 수행하고 필요한 데이터를 가지고 올 수 있는 기능을 제공합니다.
위 응용 프로그램에서 FlexGrid에 데이터 필터링 기능을 구현하려면 다음 단계를 따라 보세요.
2. 양식의 로드 이벤트 핸들러에서 C1DataFilter 컨트롤의 데이터 소스를 FlexGrid 컨트롤의 데이터 소스와 동일하게 설정합니다.
c1DataFilter1.DataSource = _dataTable;
3. C1DataFilter의 속성을 true로 설정하여 데이터 소스에 존재하는 필드의 유형에 따라 기본 필터를 만듭니다.
4. DataFilter의 이벤트를 구독하여 자동으로 생성된 필터를 수정합니다.
의 최소/최대값 및 의 체크리스트 항목과 같은 필터링 매개 변수를 지정했습니다.
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 데이터의 자동 필터링 활성화 또는 비활성화하는 옵션과 사용자가 클릭하여 그리드에 필터링을 명시적으로 적용할 수 있는 전용 버튼을 추가했습니다.
응용 프로그램을 실행하고 데이터 필터링 기능을 테스트합니다.
강력한 검색 및 필터링 기능을 FlexGrid에 통합하여 WinForms 응용 프로그램의 잠재력을 극대화하였습니다.
사용자가 방대한 양의 데이터 집합 내를 쉽게 이동하고, 유용한 통계를 생성하고 데이터 검색, 강조 표시 및 필터링 기능을 사용해, 정보를 바탕으로 결정을 내릴 수 있도록 합니다.
이러한 강력한 기능을 사용하여 소비자가 데이터를 이용하는 방식을 변화시켜 보시길 바랍니다.
지금 바로 ComponentOne을 다운로드하여 직접 테스트해 보세요!
댓글목록
등록된 댓글이 없습니다.