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

.NET C# Datagrid 응용 프로그램에 동적 정렬 및 필터 옵션 추가 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

.NET C# Datagrid 응용 프로그램에 동적 정렬 및 필터 옵션 추가

페이지 정보

작성자 GrapeCity 작성일 2022-05-19 09:38 조회 2,578회 댓글 0건

본문

C1DataEngine은 크고 복잡한 데이터 집합에서 관련된 정보를 추출하여 높은 성능의 분석을 제공하는 독립 실행형 패키지입니다. 칼럼 기반 저장소 모델은 주목할 만한 성능을 제공하도록 메모리 매핑 파일을 사용하며 1초보다 적은 시간 내에 수백만의 레코드를 처리할 수 있습니다.

C1DataEngine을 사용하면 다양한 소스에서 데이터를 가져와 비즈니스 요구 사항에 따라 변환할 수 있습니다. 이 변환은 최종 사용자가 이해하기 위해 데이터를 필터링, 정렬, 집계 및 참여하고 액세스할 수 있도록 간주할 수 있습니다.

이 변환된 데이터는 비즈니스 결과를 예측하는 데 추가적으로 사용할 수 있는 빠른 데이터 통찰력을 위한 DataGrid와 같은 시각화 도구에 로드될 수 있습니다.

실제 시나리오에서 개발자는 응용 프로그램을 보다 사용자 친화적으로 만들기 위해 데이터를 인식할 수 있기를 원합니다. 데이터 인식으로 최종 사용자는 요구 사항에 따라 필터링 또는 정렬을 통해 표시된 데이터를 변경할 수 있습니다.

이 블로그에서는 최종 사용자가 기본 DataGrid 열 머리글별로 데이터를 쉽게 정렬 및 필터링하고 사용자가 아래 제공된 단계에 따라 텍스트 상자를 사용하여 입력하여 열을 필터링할 수 있도록 DataGrid와 C1DataEngine API를 사용하는 방법을 보여드리겠습니다.




WindowsForm 응용 프로그램 만들기

Visual Studio 2022에서 .NET 6.0 Windows Forms 앱을 만들고 다음 컨트롤을 폼에 놓습니다.

  • DataGridView – 데이터 표시

  • TextBox - 최종 사용자가 특정 필드에 대한 필터 텍스트 입력으로 사용합니다. 최종 목표는 TextBox에서 사용자 유형으로 그리드를 필터링하는 것입니다.

  • StatusStrip - 드롭다운 아이콘을 사용하여 StatusLabel을 StatusStrip 컨트롤에 추가하여 그리드에 행 수 표시

    양식은 다음과 같아야 합니다.

데이터 이미지 컬렉션 샘플




필수 NuGet 패키지 추가

DataEngine API를 사용하여 대용량 데이터를 로드하고 그리드에 표시하려면 다음 패키지를 프로젝트에 추가합니다.



     

        그리드에 데이터 할당  

        첫 번째로 Workspace를 초기화하여 데이터 및 IDataCollection 객체를 가져와 DataGrid에 할당된 쿼리한 데이터를 가져옵니다.

        private Workspace _workspace; 
        private IDataCollection<object> _dataCollection;


        그런 다음 LoadAsync 함수를 만들어 DataService 클래스(DataEngineCollectionSampleDataSource.cs 파일에서 가져옴)에서 데이터를 로드합니다.

        LoadAsync 메서드는 다음과 같은 모습이 됩니다.

        private async Task LoadAsync()
        {
          toolStripStatusLabel1.Text = "Generating data...";
          await Task.Yield();
          _workspace = new Workspace();
          _workspace.Init("workspace");
          if (!DataService.TablesExist(_workspace)){
            await DataService.GenerateData(_workspace);
          }
          _dataCollection = await DataService.LoadDataCollection(_workspace);
          dataGridView1.DataSource = new C1DataCollectionBindingList(_dataCollection);
          _dataCollection.CollectionChanged += _dataCollection_CollectionChanged;
          this.FormClosed += (s, e) => ((IDisposable)_dataCollection).Dispose();
          UpdateStatus();
        }




        그리드에서 데이터 변경 사항으로 ToolStripStatusLabel 업데이트

        이전 섹션의 코드에서 볼 수 있듯이 UpdateStatus라는 메서드는 그리드의 현재 행 수를 업데이트하여 ToolStripStatusLabel에 표시하는 데 사용됩니다. 컬렉션이 변경하는 경우 발생하는 DataCollection의 CollectionChanged 이벤트 처리기에 이 메서드도 사용합니다.

        코드는 다음과 같은 모습이 됩니다.

        private void UpdateStatus(){
          toolStripStatusLabel1.Text = string.Format("Count: {0}", 
          _dataCollection.Count);
        }                      
        
        private void _dataCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e){
          UpdateStatus();
        }




        런타임 필터링의 옵션 추가

        그리드에서 데이터 목록으로부터 비동기적으로 필터링할 수 있도록 DataCollection의 FilterAsync 메서드를 추가합니다. 필터링 기능은 이 데모에서 FirstName 열에 대해 추가되었습니다.

        이 메서드는 데이터에 적용된 필터 식을 가져오는 C1DataEngineCollection 클래스의 FilterExpression 속성을 전달합니다.

        사용자 유형으로 시작할 수 있도록 TextBox의 TextChanged 이벤트에 이 메서드를 추가해야 합니다.

        private void searchBox_TextChanged(object sender, System.EventArgs e){
          _dataCollection.FilterAsync(FilterExpression.FromString(searchBox.Text, new string[] { "FirstName" }));
        }


        DataCollection은 정렬 기능을 기본적으로 제공하므로 열 정렬 기능에 대해 추가 코드를 추가할 필요가 없습니다. 사용자가 열 헤더를 클릭하면 데이터는 자동으로 정렬됩니다.

        최종 출력은 아래 제공된 GIF와 같이 작동합니다.

        최종 출력


        Github 링크에서 샘플을 다운로드할 수도 있습니다. DataEngineCollectionSample




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

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

        댓글목록

        등록된 댓글이 없습니다.

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

        태그1

        인기글

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