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

[WinForms] 정렬 > 온라인 스터디

본문 바로가기

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

페이지 정보

작성자 GrapeCity 작성일 2021-10-26 10:53 조회 1,129회 댓글 0건

본문

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

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

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

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

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

  • 데이터 검색 사용자 정의

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




Spread.NET 초기화

본격적인 내용을 살펴보기에 앞서, 본 포스팅에서 사용될 데이터 샘플을 만들어보겠습니다.

학생 데이터는 {int 학생코드, int 시험성적, int 과제성적, string 학점}으로 구성됩니다. 시험 성적과 과제 성적은 랜덤으로 부여되고, 학점은 두 성적의 합을 기준으로 80점 이상이면 A, 80미만 50점 이상이면 B, 나머지는 C 학점입니다. 물론, 실제로는 성적을 랜덤으로 결정하면 큰일나겠죠? ^^

  1. 새 프로젝트를 생성하고, 도구상자에서 FpSpread 컴포넌트를 드래그하여 Form으로 가지고 옵니다.

  2. 속성 패널에서 스프레드의 Dock 속성을 Fill로 설정하여 스프레드가 폼에 가득 차도록 합니다.




  3. InitializeSampleData 메소드를 생성합니다.

    private void InitializeSampleData()
    {
    // 이어지는 단계에 따라 메소드 내부를 채워나갑니다.
    }

  4. 데이터가 입력될 4개 열의 사이즈를 조정합니다. SetMultipleColumnWidths 메소드를 통해 여러 열의 너비를 한 번에 조정할 수 있습니다.

    인자로는 시작열, 열 개수, 열 너비가 사용됩니다.

    // 열 사이즈 설정
    fpSpread1.ActiveSheet.SetMultipleColumnWidths(0, 4, 100);

  5. 열 헤더명을 변경합니다. SetColumnLabel 메소드로 열 헤더명을 수정할 수 있습니다.

    // 열 헤더명 변경
    fpSpread1.ActiveSheet.SetColumnLabel(0, 0, "학생코드");
    fpSpread1.ActiveSheet.SetColumnLabel(0, 1, "시험점수");
    fpSpread1.ActiveSheet.SetColumnLabel(0, 2, "과제점수");
    fpSpread1.ActiveSheet.SetColumnLabel(0, 3, "학점");

  6. 데이터를 입력합니다. Random.Next(int maxValue) 메소드로, 0 이상 maxValue 이하 임의의 정수 값을 추출할 수 있습니다. 학생 10명에 대한 데이터를 입력하기 위해 for문을 사용합니다.

    // 데이터 입력
    Random rnd = new Random();
    int test, homework = 0;
    for (int index=0; index<10; index++)
    {
      //학생코드에 1부터 10까지 순차적으로 입력
      fpSpread1.ActiveSheet.Cells[index, 0].Value = index + 1;
      // 시험점수 입력: [0점, 70점]
      test = rnd.Next(70);
      fpSpread1.ActiveSheet.Cells[index, 1].Value = test;
      // 과제점수 입력: [0점, 30점]
      homework = rnd.Next(30);
      fpSpread1.ActiveSheet.Cells[index, 2].Value = homework;
      // 시험점수와 과제점수의 합으로 학점 도출
      // A: 80이상
      // B: 50이상 80미만
      // C: 50 미만
      if((test + homework) >= 80)
      {
      fpSpread1.ActiveSheet.Cells[index, 3].Text = "A";
      }
      else if ((test + homework) >= 50)
      {
      fpSpread1.ActiveSheet.Cells[index, 3].Text = "B";
      }
      else
      {
      fpSpread1.ActiveSheet.Cells[index, 3].Text = "C";
      }
    }

  7. Form()에서 정의한 InitializeSampleData 메소드를 호출합니다.

    public Form1()
    {
    InitializeComponent();
    InitializeSampleData();
    }


  8. 코드를 실행하여 아래와 같은 화면을 확인하실 수 있습니다.




정렬


일반적으로 시트의 모든 행은 특정 열의 값을 기준으로 정렬되지만, Spread.NET은 각 정렬 유형에 대해 다양한 속성과 방법으로 정렬을 수행하는 여러 방법을 제공합니다. 일반적으로 다음 방법 중 하나로 정렬을 수행하고 사용자 정의할 수 있습니다.

  • 자동 행 정렬 허용

  • 행/열 또는 범위 정렬

  • 정렬 표시기의 모양 설정

  • 셀 범위 정렬 관리


정렬 순서에는 오름차순, 내림차순이 있으며, 데이터를 정렬하기 위한 비교 키 값과 방법을 사용자 정의할 수 있습니다.

정렬 표시기는 일반적으로 화살표 모양이며, 비교 키로 사용되는 열의 헤더에 표시할 수 있습니다. 열의 정렬 표시기를 비활성화 시키지 않은 경우, 자동 정렬 허용 시 열 헤더에 정렬 표시기가 나타납니다.

셀 타입은 정렬에 큰 영향을 주지 않으며, 셀에 있는 값의 데이터 유형에 따라 정렬됩니다. 예를들어, DateTime 유형의 데이터로 셀을 정렬하면 해당 셀을 날짜 별로 정렬하고, Text 데이터로 셀을 정렬하면 해당 셀을 알파벳 또는 가나다 순으로 정렬합니다.

정렬 시 자동 정렬을 사용하거나, SortRows 메소드를 호출하면 데이터 모델에는 영향을 미치지 않으며, 사용자에게 표시되는 데이터만 정렬이 됩니다. 이 경우, 숨긴 행도 자동으로 이동되기 때문에 정렬 전에 숨겨진 모든 데이터는 정렬 후에도 숨겨져 있습니다. 그러나 SortRange 메소드를 사용하는 경우, 데이터가 데이터 모델에서 정렬되고, 숨겨진 데이터가 표시될 수 있습니다. 반대로 사용자가 볼 수 있었던 데이터가 숨겨지기도 합니다.

* Outlook 스타일 그룹화가 켜져 있을 때는 정렬이 되지 않습니다. 그룹화(정렬 유형)에 대한 자세한 내용은 사용자 데이터 행 그룹화 관리를 참고하시기 바랍니다.


이제 간단한 행 정렬 예제로, 자동 정렬을 사용해 보도록 하겠습니다.


다중 열 정렬 허용

SetColumnAllowAutoSort(int columnIndex, int columnCount, bool allowAutoSort) 메소드를 사용하여 다중 열에 자동 정렬을 허용합니다. columnIndex부터 columnCount 수 만큼의 열에 대해 자동정렬이 허용됩니다. 이 경우, 사용자가 열 헤더를 클릭하여 데이터를 오름차순 또는 내림차순으로 정렬할 수 있는 기능을 제공합니다. 열 헤더를 클릭하면 클릭한 열의 값을 기준으로 오름차순 또는 내림차순 정렬되는 것을 확인할 수 있습니다. 

// 0번 열부터 4개 열에 대한 자동정렬을 허용
fpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, 4, true);

ef1ebabf6273c16c7232abacc0970fdf_1635140111_1843.gif
 


특정 열 정렬 허용

이어서, 특정 열에 대해 정렬 기능을 설정하는 방법을 알아보겠습니다.

  1. SetColumnAllowAutoSort(int columnIndex, bool allowAutoSort)를 사용하여 특정 열에 대한 자동 정렬을 허용합니다. 이 경우, 사용자가 열 헤더를 클릭하여 데이터를 오름차순 또는 내림차순으로 정렬할 수 있는 기능을 제공합니다.

    // 학점 열(3번 열)에 대해 자동정렬 허용
    fpSpread1.ActiveSheet.SetColumnAllowAutoSort(3, true);

    ef1ebabf6273c16c7232abacc0970fdf_1635140203_0264.png

  2. SetColumShowSortIndicator 메소드를 사용하여 정렬 표시기를 화면에 표시할지, 표시하지 않을지를 선택합니다. SetColumShowSortIndicator 메소드는 반드시 AutoSortColumn 메소드 전에 호출되어야 하며, AutoSortColumn 메소드를 호출하기 전까지는 아무 변화도 발생하지 않습니다.

    // 학점 열(3번 열) 헤더에 자동정렬 표시기가 보이도록 설정
    fpSpread1.ActiveSheet.SetColumnShowSortIndicator(3, true);

  3. AutoSortColumn 메소드를 사용하여 지정한 키에 따라 자동 정렬을 수행합니다. 하나의 열에 대해서만 정렬이 가능하며, 두번째 인자 값(bool)에 따라 정렬 순서를 지정할 수 있습니다.

    // 3번 열의 값을 기준으로 오름차순 정렬
    // 두번째 인자 값이 false인 경우 내림차순 정렬됨.
    fpSpread1.ActiveSheet.AutoSortColumn(3, true);

    ef1ebabf6273c16c7232abacc0970fdf_1635140244_528.png

  4. 또는 2,3번의 기능을 아래의 코드 한 줄로 설정할 수 있습니다. AutoSortColumn 메소드의 세번째 인자 값(bool)으로 인디케이터 표시 여부를 설정합니다.

    // 학점 열(3번 열)에 대해 오름차순으로 자동정렬하고, 인디케이터를 표시함
    fpSpread1.ActiveSheet.AutoSortColumn(3, true, true);

샘플을 다운로드하여 전체 코드를 확인해 보실 수 있습니다.  

Sorting - 샘플 다운로드




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