C# 프로그램에서 데이터베이스 테이블의 데이터를 SELECT 해서 가져오거나, 테이블 구조의 데이터를 처리하기 위해 DataTable을 많이 사용하게 됩니다.
DataTable을 사용하면서 특정 컬럼으로 정렬을 해야 하는 경우 어떻게 하면 될까요?
C#에서 DataTable의 컬럼을 정렬하는 방법은 여러가지가 있습니다.
이번 글에서는 비교적 많이 사용하는 C# DataTable 정렬(Sort) 방법 3가지(여러 컬럼 조합해서 정렬)에 대해 알아보겠습니다.
▼ 정렬하기 전의 샘플 DataTable 입니다.
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”
▼ PrimaryKey 컬럼은 오름차순(ASC)으로, Secondary 칼럼은 내림차순(DESC)으로 정렬한 결과 입니다.
- “PrimaryKey, Secondary DESC”
DataTable의 원본은 유지하면서 정렬 된 결과의 DataTable을 별도로 만들 경우 DataView를 활용하면 됩니다.
주로 사용하는 세 가지 방법 중에 프로그램 상황에 맞게 적절한 방법으로 DataTable 정렬(Sort)을 구현해서 사용하시면 됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^