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

데스크톱 앱에서 C# DataGrid 기능을 사용자 정의하는 방법 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

데스크톱 앱에서 C# DataGrid 기능을 사용자 정의하는 방법

페이지 정보

작성자 MESCIUS 작성일 2024-04-18 10:31 조회 45회 댓글 0건

본문

첨부파일

ComponentOne FlexGrid는 고성능 기능과 익숙한 Microsoft Excel 방식의 경험을 제공하는, 빠르고 유연한 .NET DataGrid입니다.

FlexGrid는 기본적으로 표 형식 데이터를 기존 방식으로 편집, 시각화 및 분석하는 데 사용됩니다. FlexGrid의 매우 유연한 API는 여전히 개발자가 전체 컨트롤과 사용자 정의를 통해 수준까지 확장하는 데 도움이 됩니다!

이 블로그 게시물에서는 빠른 C# 코드 조각을 사용하여 FlexGrid를 사용자 정의하는 방법을 살펴봅니다.


FlexGrid는 거의 동일한 API를 통해 전체 Microsoft .NET 스택에서 지원되므로, 이 블로그에서는 데스크톱, 웹 및 모바일 .NET 플랫폼 간에 기능을 비교합니다. 


이 게시글에서는 다음 내용을 다룹니다.




성능 최적화 기법 


FlexGrid는 셀 내에 포함된 UI 요소의 생성, 이동 및 재생을 최적화하는 UI 가상화를 사용하여 개발됩니다. 특별히 준비가 필요하지는 않지만, 대용량 데이터 집합을 더 잘 처리하기 위해 사용할 수 있는 추가 최적화 기법이 있습니다.



데이터 가상화


데이터 가상화(또는 가상 모드)는 원격 소스의 데이터를 한 번에 모두 로드하는 대신 증분 방식으로 로드하는 프로세스입니다.


FlexGrid을 사용하면, 사용자가 그리드를 스크롤함에 따라 데이터가 점진적으로 로드됩니다. 이 프로세스는 초기 로드 시간이 감소하므로 대용량 데이터 집합을 처리할 때 유용합니다.


데이터 가상화는 C1DataCollection 라이브러리를 통해 .NET DataGrid에서 지원됩니다. 프로세스는 데이터 개체와 관련된 C1VirtualDataCollection을 확장하여 고유한 CollectionView를 구현하는 것입니다.


그런 다음 이를 FlexGrid의 데이터 소스로 설정합니다.

using C1.DataCollection;
​
MyVirtualModeCollectionView collectionView = new MyVirtualModeCollectionView();
c1FlexGrid1.DataSource = new C1DataCollectionBindingList(collectionView);
​
public class MyVirtualModeCollectionView : C1VirtualDataCollection<Customer>
{
    public int TotalCount { get; set; } = 1_000;
​
    protected override async Task<Tuple<int, IReadOnlyList<Customer>>> GetPageAsync(int pageIndex, int startingIndex, int count, IReadOnlyList<SortDescription> sortDescriptions = null, FilterExpression filterExpression = null, CancellationToken cancellationToken = default(CancellationToken))
    {
        await Task.Delay(500, cancellationToken);//Simulates network traffic.
        return new Tuple<int, IReadOnlyList<Customer>>(TotalCount, Enumerable.Range(startingIndex, count).Select(i => new Customer(i)).ToList());
    }
}



FlexGrid용 C# 샘플 페이징


가상화는 데이터 소스에서 추출되는 레코드 수를 제한하므로 성능을 최적화하기 위한 최상의 기법입니다. 하지만, 일부 원하는 솔루션에서는 그만큼 최적화가 필요하지 않거나 데이터 소스가 이를 지원하지 않을 수도 있습니다.


다른 기법은 페이징입니다. 전체 데이터는 표준 .NET 페이징을 통해 로드되지만, 한 번에 한 페이지만 표시됩니다.


이 기능은 일부 UI 성능 최적화를 제공하지만, 인지된 성능도 제공합니다.


다음 C# 코드 조각은 페이징이 구현되는 방식을 보여주며 추가 성능 최적화를 위해 BeginUpdate/EndUpdate 메서드를 사용합니다.


완전한 구현을 위해 전체 샘플을 다운로드하십시오.

public void UpdateGrid()
{
    using (OleDbConnection conn = new OleDbConnection(GetConnectionString()))
    {
        string sql = $"SELECT * FROM [{TABLE_NAME}]";
        OleDbDataAdapter pagingAdapter = new OleDbDataAdapter(sql, conn);
        DataSet pagingDS = new DataSet();
​
        //Get limited data from database
        pagingAdapter.Fill(pagingDS, DB_INDEX, ROWS_PER_PAGE, TABLE_NAME);
​
        c1FlexGrid1.BeginUpdate();
​
        c1FlexGrid1.DataSource = pagingDS;
        c1FlexGrid1.DataMember = TABLE_NAME;
​
        c1FlexGrid1.EndUpdate();
    }
}


성능에 관한 추가 팁과 요령은 가장 빠른 WinForms DataGrid인 FlexGrid를 빌드하고 최적화하는 방법을 확인하십시오.



DataGrid 스타일 사용자 정의 


.NET DataGrid 스타일 지정은 응용 프로그램 테마 또는 개별 셀의 조건부 스타일 지정(또는 서식)을 참조할 수 있습니다.


응용 프로그램 전체 테마 설정 기법은 .NET 플랫폼 간에 크게 다르며, FlexGrid의 셀 스타일 지정은 거의 같습니다.



사용자 정의 필터 만들기


사용자 정의 CellStyle을 만들고 배경색 및 텍스트 색과 같은 속성을 지정할 수 있습니다.

FlexGrid에는 이미 사용자의 스타일을 추가할 수 있는 기본 제공 셀 스타일 컬렉션이 포함되어 있습니다.

//Creating a custom style 
CellStyle cs1 = c1FlexGrid1.Styles.Add("NewStyle");
cs1.BackColor = Color.Aqua;
cs1.ForeColor = Color.Blue;


FlexGrid 속성의 "스타일" 링크를 클릭하여 디자인 타임 환경에서 셀 스타일을 사용자 정의할 수도 있습니다.



조건부로 셀 스타일 적용


다음 단계는 셀 스타일을 원하는 기준을 충족하는 특정 셀로 설정하는 것입니다.


FlexGrid를 사용하면 간단한 [행,열] 색인을 사용하여 쉽게 셀 값에 액세스할 수 있으므로, 모든 행과 셀을 순환하고 각 셀 스타일을 설정할 수 있습니다.


더 스마트한 접근 방식은 OwnerDrawCell 이벤트를 활용하는 것입니다.

이 이벤트는 각 셀이 렌더링될 때 실행되어, 사용자 정의 로직을 재정의하거나 추가할 수 있습니다. DrawMode 속성을 OwnerDraw로 설정한 다음 이벤트에 간단한 if/else 로직을 설정합니다.


다음 코드 조각은 값이 500보다 큰 #6 열에 "NewStyle"을 적용합니다.

c1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
c1FlexGrid1.OwnerDrawCell += FlexGrid_OwnerDrawCell;
​
private void FlexGrid_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
    if(e.Col == 6)
    {
        var value = c1FlexGrid1[e.Row, e.Col];
        double d;
        if(double.TryParse(value.ToString(), out d))
        {
            if(d >= 500)
            {
                c1FlexGrid1.SetCellStyle(e.Row, e.Col, flexGrid.Styles["NewStyle"]);
            }
        }
    }
}



셀 스타일 지정에 관한 자세한 내용은 .NET DataGrid 응용 프로그램에서 셀의 스타일을 지정하는 방법을 확인하십시오.



런타임에 DataGrid 내보내기 


WinForms용 FlexGrid는 사용자가 런타임에 Excel, CSV, HTML, 일반 텍스트 및 이미지로 내보낼 수 있습니다.

이러한 서식은 라이브러리에 기본적으로 포함되어 있으며, 최소한의 추가 코드를 사용하여 PDF로 내보낼 수도 있습니다.



Excel로 내보내기


FlexGrid를 Excel로 내보내려면, SaveExcel 메서드를 호출하고 파일 경로 및 파일 플래그 옵션을 전달하십시오.

c1FlexGrid1.SaveExcel("../../ExportedGrid.xlsx",  
    FileFlags.AsDisplayed | FileFlags.IncludeFixedCells);


파일 플래그 옵션을 사용하면 고정 셀을 포함하고, 보이는 행만 내보내고, 행을 고정하는 등의 작업을 할 수 있습니다. 자세한 내용은 문서를 확인하십시오.



PDF로 내보내기


FlexGrid를 PDF로 저장하는 가장 쉬운 방법은 Windows PrintDocument의 기본 제공"Microsoft PDF로 인쇄" 기능을 사용하는 것입니다.


이 프린터 유형을 설정하면 FlexGrid의 Print 메서드를 간단히 호출할 수 있으며, 사용자에게 어딘가에 파일을 저장하라는 메시지가 표시됩니다.

var printDocument = _flexGrid.PrintParameters.PrintDocument;
printDocument.DocumentName = "Export to PDF";
printDocument.PrinterSettings.PrinterName = "Microsoft Print to PDF";
// Print document into Microsoft PDF printer
 printDocument.Print(); 


기존 인쇄에도 동일한 접근 방식을 사용할 수 있습니다.


또한 이 접근 방식은 빠른 인쇄/내보내기를 위한 것이지만, 테두리, 특정 페이지 또는 열 구분선 기준 인쇄 등 고급 옵션을 설정할 수는 없습니다.


C1PrintDocument를 사용하여 이러한 기능을 구현하는 방법을 보여드립니다. PDF로 고급 내보내기를 참조하십시오.




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

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

댓글목록

등록된 댓글이 없습니다.

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

태그1

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