C# DataTable 정렬(Sort) 방법 3가지(여러 컬럼 조합해서 정렬)

C# 프로그램에서 데이터베이스 테이블의 데이터를 SELECT 해서 가져오거나, 테이블 구조의 데이터를 처리하기 위해 DataTable을 많이 사용하게 됩니다.

DataTable을 사용하면서 특정 컬럼으로 정렬을 해야 하는 경우 어떻게 하면 될까요?
C#에서 DataTable의 컬럼을 정렬하는 방법은 여러가지가 있습니다.

이번 글에서는 비교적 많이 사용하는 C# DataTable 정렬(Sort) 방법 3가지(여러 컬럼 조합해서 정렬)에 대해 알아보겠습니다.

▼ 정렬하기 전의 샘플 DataTable 입니다.

C# DataTable 정렬(Sort) 방법 3가지(여러 컬럼 조합해서 정렬) 1

DataTable.Sort 속성으로 정렬

▶ 첫 번째 방법은 DataTable.Sort 속성을 사용해서 정렬하는 방법입니다.

DataTable dt = new DataTable();
 
// … 테이블 채우기 생략
 
// 오름차순
dt.DefaultView.Sort = “PrimaryKey ASC”;
dt = dt.DefaultView.ToTable();
 
// 내림차순
dt.DefaultView.Sort = “PrimaryKey DESC”;
dt = dt.DefaultView.ToTable();
 
// 여러 컬럼으로 정렬(오름차순, 내림차순 혼합)
dt.DefaultView.Sort = “PrimaryKey, Secondary DESC”;
dt = dt.DefaultView.ToTable();
 
  • 오름차순(Ascending)ASC”는 생략해도 됩니다.
  • 내림차순(Descending)DESC“는 반드시 표시해 주어야 합니다.
  • DataTable.DefaultView.Sort가 정렬되지 않는 경우 DataTable.DefaultView.ToTable()로 정렬을 적용할 수 있습니다.
  • 여러 컬럼으로 정렬할 경우 각 컬럼 사이에 쉼표(“,“)로 구분해서 입력해 주면 됩니다.
    이때 각 컬럼마다 오름차순, 내림차순을 다르게 지정할 수 있습니다.

DataView.Sort 속성으로 DataTable 정렬

▶ 두 번째 방법은 DataView.Sort를 사용하여 DataTable을 정렬하는 방법입니다.

DataTable dt = new DataTable();
 
// … 테이블 채우기 생략
 
DataView dv = new DataView(dt);
dv.Sort = “PrimaryKey ASC”;
dt = dv.ToTable();
 
dv.Sort = “PrimaryKey, Secondary DESC”;
dt = dv.ToTable();
 
  • DataTable을 정렬할 때 DataView를 활용하는 경우가 많습니다.
  • DataView를 사용하는 경우는 원본의 DataTable은 그대로 유지하면서 정렬 된 결과의 복사본 DataTable을 만들 때 많이 사용합니다.
  • Sort 속성을 사용하는 방법은 앞 단락의 DataTable의 Sort 속성 사용 방법과 동일합니다.

DataTable.Select 메서드를 사용하여 정렬

▶ 세 번째 방법은 DataTable.Select 메서드를 사용해서 정렬하는 방법입니다.

  • DataTable.Select 메서드는 DataRow 개체의 배열을 가져오는 메서드 입니다.
  • Select() : 모든 DataRow 개체의 배열을 가져옵니다.
  • Select(string) : 필터 조건(string)에 맞는 모든 DataRow 개체의 배열을 가져옵니다.
  • Select(string1, string2) : 필터 조건(string1)에 맞는 모든 DataRow 개체의 배열을 지정된 정렬(string2) 순서대로 가져옵니다.
  • Select(string1, string2, DataViewRowState) : 필터(string1)와 일치하는 모든 DaraRow 개체의 배열을 지정된 상태(DataViewRowState)와 일치하는 정렬(string2) 순서대로 가져옵니다.
DataTable dt = new DataTable();
 
// … 테이블 채우기 생략
 
dt = dt.Select(“”“PrimaryKey, Secondary DESC”).CopyToDataTable<DataRow>();
 
  • Select 오버로드 중에 정렬을 사용하기 위해 Select(string1, string2)를 사용하였습니다.
  • 필터 조건에 해당하는 첫 번째 인수(string1)에는 아무것도 입력하지 않았습니다.
  • 정렬 조건에 해당하는 두 번째 인수(string2)에 컬럼과 정렬 방식을 입력하면 됩니다.
    앞 단락에서 설명한 Sort 속성과 동일하게 입력하면 됩니다.

마무리

▼ PrimaryKey 컬럼을 오름차순(ASC)으로 정렬한 결과 입니다.

  • “PrimaryKey ASC”
C# DataTable 정렬(Sort) 방법 3가지(여러 컬럼 조합해서 정렬) 2

▼ PrimaryKey 컬럼은 오름차순(ASC)으로, Secondary 칼럼은 내림차순(DESC)으로 정렬한 결과 입니다.

  • “PrimaryKey, Secondary DESC”
C# DataTable 정렬(Sort) 방법 3가지(여러 컬럼 조합해서 정렬) 3


DataTable의 원본은 유지하면서 정렬 된 결과의 DataTable을 별도로 만들 경우 DataView를 활용하면 됩니다.
주로 사용하는 세 가지 방법 중에 프로그램 상황에 맞게 적절한 방법으로 DataTable 정렬(Sort)을 구현해서 사용하시면 됩니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기