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

[WinForms] 그룹화 > 온라인 스터디

본문 바로가기

Spread.NET

온라인 스터디

5. 필터 및 그룹화 [WinForms] 그룹화

페이지 정보

작성자 GrapeCity 작성일 2021-10-26 11:18 조회 902회 댓글 0건

본문

Spread.NET에서는 스프레드시트와 사용자가 상호작용하는 다양한 측면을 사용자 정의할 수 있습니다. 예를 들면, 다음과 같은 항목이 있습니다.

  • 사용자 데이터 행 정렬 관리(Sort)

  • 사용자 데이터 행 필터링 관리(Filter)

  • 사용자 데이터 행 그룹화 관리(Grouping)

  • 행/열의 개요 관리(Outline, 또는 Range Group)

  • 데이터 검색 사용자 정의

본 포스팅에서는 Excel에서 자주 사용하는 기능인 그룹화에 대해 살펴보도록 하겠습니다.



그룹화

그룹화를 사용하면 사용자가 그룹 표시줄로 끌어온 열 헤더에 따라 데이터 행을 그룹화할 수 있습니다. 특수 그룹 헤더는 그룹화된 행 위에 표시됩니다. 행 그룹화에는 다음 작업이 포함됩니다.

  • 사용자가 행을 그룹화하도록 허용

  • 그룹화 사용

  • 그룹화된 행의 모양 설정

  • 그룹 표시줄 사용자 지정

  • 사용자 지정 그룹 생성

  • 다른 기능과 그룹화의 상호 운용성


이제, 상품 판매 Excel 파일을 불러와 그룹화 기능을 설정하고, 그룹화 푸터를 생성하여 품목별 판매량의 합계를 푸터에 나타내는 방법에 대해 알아보겠습니다. 

샘플 코드를 참고하여 기능을 테스트해보시길 바랍니다. 

그룹화 설정 - 샘플 다운로드


  1. 스프레드 초기화 함수를 만들어 줍니다. 이어지는 2~4번에 따라 InitSpread() 메소드 내부를 채워나갑니다.

    private void InitSpread()
    {
    // 이어지는 단계에 따라 본 메소드 내부를 구성함.
    }

  2. 먼저 스프레드를 초기화합니다. 데이터가 저장되어있는 Excel.xlsx 파일을 열어 스프레드에 로드합니다. * 파일 열기 플래그(ExcelOpenFlags)로는 15개 옵션이 존재하므로, 필요에 따라 플래그를 지정합니다.

    // 엑셀 파일 경로 설정. 파일명은 절대 경로로 나타낸다.
    string filename = Path.Combine(Application.StartupPath, "..\\..\\Resources\\excel.xlsx");
    // 엑셀 파일 열기. 파일을 열 때, 성능향상을 위해 빈 행과 열을 잘라 냄.
    fpSpread1.OpenExcel(filename, FarPoint.Excel.ExcelOpenFlags.TruncateEmptyRowsAndColumns);

    ef1ebabf6273c16c7232abacc0970fdf_1635143119_5936.png

  3. GroupBarInfo 클래스의 Visible 속성을 사용하여 그룹 표시줄을 설정합니다. 그 결과, 스프레드 상단에 '해당 열로 그룹화할 열을 두번 클릭합니다.'라는 메세지가 표시된 그룹 표시줄이 생성됩니다. 그러나 아직은 특정 열 더블클릭 시 어떠한 변화도 발생하지 않습니다. 그룹 표시줄로 사용자가 열 헤더를 끌어와 그룹화를 하게 하려면, Spread.AllowColumnMove 속성을 true로 설정합니다.

    // 그룹 표시줄 설정
    fpSpread1.AllowColumnMove = true ;
    fpSpread1.ActiveSheet.GroupBarInfo.Visible = true ;

    ef1ebabf6273c16c7232abacc0970fdf_1635143443_6464.png

  4. SheetView.AllowGroup 속성을 true로 설정하여 그룹화를 허용합니다. 이제 특정 열을 더블 클릭하면, 해당 열을 기준으로 그룹화가 이루어집니다. 그룹바를 보면 어떤 열을 기준으로 그룹화 되었는지를 확인할 수 있고, 오름차순 또는 내림차순으로 그룹 순서를 정렬할 수 있습니다.

    // 그룹화 허용
    fpSpread1.ActiveSheet.AllowGroup = true;

    ef1ebabf6273c16c7232abacc0970fdf_1635143465_7842.gif

  5. 이제 그룹 푸터를 생성해 보겠습니다. 이어지는 설명에 따라 CreateGroupFooter() 메소드 내부를 채워 나갑니다.

    private void CreateGroupFooter()
    {
    // 이어지는 6~11단계에 따라 본 메소드 내부를 구성합니다
    }

  6. 그룹화를 위해 GroupDataModel 객체를 생성합니다.

    SheetView sheet = fpSpread1.ActiveSheet;
    // 스프레드시트에 바인딩 된 데이터로 그룹데이터모델 객체 생성
    GroupDataModel gdm = new GroupDataModel(sheet.Models.Data);
    sheet.Models.Data = gdm;

  7. SortInfo를 사용해 그룹화할 기준 열 인덱스를 설정하고, GroupDataModel.Group 메소드를 사용해 지정한 열을 기준으로 그룹화 합니다. 이미지와 같이, A열(품목)을 기준으로 정렬된 것을 확인할 수 있습니다.

    //SortInfo 생성자 SortInfo(0, true) 첫 번째 인수는 그룹화 열 인덱스에 사용
    SortInfo[] siList = new SortInfo[] { new SortInfo(0, true) };
    // 지정한 열을 기준으로 그룹화
    gdm.Group(siList, null);

    ef1ebabf6273c16c7232abacc0970fdf_1635143545_7104.PNG

  8. 그룹 푸터를 설정합니다. DefaultGroupFooter의 매개변수로는 그룹 푸터의 기준이 되는 열의 인덱스가 들어갑니다. 이 단계에서는 푸터가 나타나지 않습니다.

    // 기본 그룹 푸터 설정
    DefaultGroupFooter dgf = fpSpread1.ActiveSheet.DefaultGroupFooter[0];
    ISheetDataModel dataModel = dgf.DataModel;

  9. 푸터에 품목별 판매 수량 합계(총량)을 표시하기 위해 집계(Aggregation) 기능을 사용합니다. IAggregationSupport 인터페이스는 데이터 모델의 셀 범위에 대한 집계 기능을 지원하는 인터페이스입니다. 해당 인터페이스의 SetCellAggregationType 메소드로 각 그룹(품목)별 총량을 구합니다. 이후 SetCellAggregationFormat 메소드로 서식을 설정합니다.

    // Footer에 수식을 설정
    (dataModel as IAggregationSupport).SetCellAggregationType(0, 3, AggregationType.Sum);
    (dataModel as IAggregationSupport).SetCellAggregationFormat(0, 3, "총량: {0}");

  10. GroupFooterVisible 속성을 true로 설정하여, 그룹화 푸터가 보이도록 설정합니다. 푸터 행 D열에 품목별 판매 총량이 보이는 것을 확인할 수 있습니다. * 만약 9단계와 10단계의 순서를 변경하면, 총량이 화면에 나오지 않으므로 유의하시기 바랍니다.

    // 푸터 보이게 설정
    sheet.GroupFooterVisible = true;

    ef1ebabf6273c16c7232abacc0970fdf_1635143615_7816.png

  11. 위 이미지의 셀 D29를 보면, 셀 내용의 일부가 가려지는 것을 확인할 수 있습니다. Columns.GetPreferredWidth() 메소드를 사용해, 해당 열의 너비를 텍스트 전체가 보여질 수 있는 최소 넓이로 설정합니다.

    //열 너비 재설정
    sheet.Columns[3].Width = sheet.Columns[3].GetPreferredWidth();

    ef1ebabf6273c16c7232abacc0970fdf_1635143648_7785.png
     



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

spnet.png


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

댓글목록

등록된 댓글이 없습니다.

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

태그1

인기글

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