[C# 문법] C# DataTable 특정 컬럼 기준 정렬하기


안녕하세요.

 

오늘은 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();

        }

    }

}

 

Colored by Color Scripter

cs


실행 결과



현재 정렬 기준을 ASC 오름차순 기준으로 하여 위와 같이 Grade 성적 순으로 제대로 정렬된 것을 확인하실 수 있습니다.

 

내림차순으로 정렬하고 싶으시다면, DESC 문구로 변경하여 시켜주시면 됩니다.

 

감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY