[C# 문법] C# DataTable 특정 컬럼 기준 정렬하기
- C#/C# 문법
- 2020. 4. 23. 01:00
안녕하세요.
오늘은 C# 에서 DataTable 특정 컬럼 기준으로 정렬하는 방법에 대해서 알려드리려고 합니다.
C# 으로 프로젝트를 진행 중, DataTable 을 이용하여 작업을 하던 중 정렬이 필요한 경우가 종종 있는데 이럴 때 매우 유용할 거에요!ㅎㅎ
그럼 바로 예제 코드를 작성해 보도록 하겠습니다.
저는 Student 라는 DataTable을 만들고, 학생 별 성적 순으로 정렬하는 방법을 보여드리도록 하겠습니다.
예제 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace TestProgram { class Program { static DataTable dt = null;
static void Main(string[] args) { dt = new DataTable(); dt = GetData();
//정렬 전 Console.WriteLine("----------- 정렬 전 -----------");
for(int row = 0; row < dt.Rows.Count; row++) { string msg = string.Format("이름 : {0}, 나이 : {1}, 성적 : {2}", dt.Rows[row][0].ToString(), dt.Rows[row][1].ToString(), dt.Rows[row][2].ToString()); Console.WriteLine(msg); }
Console.WriteLine(); Console.WriteLine(); Console.WriteLine();
//정렬 후 Console.WriteLine("----------- 정렬 후 -----------");
DataTable sotrDt = new DataTable(); //Grade 순으로 정렬 sotrDt = OrderByTable(dt);
for (int row = 0; row < sotrDt.Rows.Count; row++) { string msg = string.Format("이름 : {0}, 나이 : {1}, 성적 : {2}", sotrDt.Rows[row][0].ToString(), sotrDt.Rows[row][1].ToString(), sotrDt.Rows[row][2].ToString()); Console.WriteLine(msg); } }
public static DataTable GetData() { dt = new DataTable();
dt.Columns.Add("Name"); dt.Columns.Add("Age"); dt.Columns.Add("Grade");
dt.Rows.Add(new string[] { "범범조조", "28", "95" }); dt.Rows.Add(new string[] { "안정환", "45", "36" }); dt.Rows.Add(new string[] { "윤미래", "41", "45" }); dt.Rows.Add(new string[] { "10cm", "20", "77" }); dt.Rows.Add(new string[] { "아이유", "27", "85" }); dt.Rows.Add(new string[] { "리준우", "28", "100" });
return dt; }
/// <summary> /// DataTalbe 정렬 메서드 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static DataTable OrderByTable(DataTable dt) { DataTable sortDt = dt.Clone();
//String 형식을 Int 정수 형식으로 변경 sortDt.Columns["Grade"].DataType = Type.GetType("System.Int32");
foreach (DataRow dr in dt.Rows) { sortDt.ImportRow(dr); } sortDt.AcceptChanges();
DataView dv = sortDt.DefaultView; dv.Sort = "Grade ASC";
return dv.ToTable(); } } }
|
실행 결과
현재 정렬 기준을 ASC 오름차순 기준으로 하여 위와 같이 Grade 성적 순으로 제대로 정렬된 것을 확인하실 수 있습니다.
내림차순으로 정렬하고 싶으시다면, DESC 문구로 변경하여 시켜주시면 됩니다.
감사합니다.^^
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# 문자열 대소문자 구분없이 비교하는 방법 (0) | 2020.04.26 |
---|---|
[C# 문법] C# DataTable 데이터 값 변경하는 방법 (0) | 2020.04.24 |
[C# 문법] C# Linq Where 구문 AND / OR 조건 추가하는 방법 (0) | 2020.03.09 |
[C# 문법] C# 튜플(Tuple) 사용하기 (0) | 2020.03.07 |
[C# 문법] PictureBox 컨트롤 이용하여 이미지(Image) 넣는 방법 (0) | 2020.02.28 |
이 글을 공유하기