C#/DataTable

[C#/.Net] DataTable 중복 Row 제거하기 (distinct 효과)

Fly_Mir 2015. 11. 12. 10:45
Mir의 운영환경
본체DeskTop
O SWindows XP Professional Ver 2002 Service Pack 2
ApplicationVisualStudio2010
.NetFramework Ver 3.5

System.Data.DataTable.DefaultView.ToTable()을 이용하여 중복 Row를 제거해보자.

DataTable.DefaultView.ToTable() 메소드는 기본적으로 Table을 Copy하여 리턴해줍니다.

DataTable.Copy()와 다른점은 DataTable이 아닌 DataView를 기준으로 Copy를 해주며

Copy와 동시에 인자값을 어떻게 넣어주냐에 따라 중복 Data제거(Distinct)특정 컬럼만 복사를 할수 있습니다.


그중 중복 Data제거를 사용할려면 인자값으로 true만 넣어주면 됩니다.


주의할점은 ToTable()은 중복 Data를 제거한 DataTable을 리턴값으로 넘겨주기 때문에 리턴값을 받을 변수를 지정해줘야 합니다.

예제

    //중복 Data 제거
    DataTable = DataTable.DefaultView.ToTable(true);

아래 예제 소스는 간단히 Data를 넣고 중복제거시 어떻게 변하는지 확인해보는 소스입니다.

기존 Data

Data 제거 소스

    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
    
                //학생 DataTable 생성
                DataTable dt = Create_Student_DataTable();
                //학생 Data 넣기
                Add_Studint_Row(dt);
                //중복 Data 제거
                dt = dt.DefaultView.ToTable(true);
                //DataGridView에 표시
                dataGridView1.DataSource = dt;
            }
    
            private DataTable Create_Student_DataTable()
            {
                //DataTable 생성 
                DataTable dt = new DataTable { TableName = "TestTbl" }; 
                //Columns 생성 
                dt.Columns.AddRange(new DataColumn[] { 
                new DataColumn { ColumnName = "Index",      Caption = "학번",     DataType = typeof(int)      } 
              , new DataColumn { ColumnName = "Name",       Caption = "이름",     DataType = typeof(string)   }  
              , new DataColumn { ColumnName = "Sex",        Caption = "성별",     DataType = typeof(string)   }
                });
    
                return dt;
            }
    
            private void Add_Studint_Row(DataTable dt)
            {
                dt.Rows.Add(new object[] { 1, "미르", "남" });
                dt.Rows.Add(new object[] { 2, "미리", "여" });
                dt.Rows.Add(new object[] { 1, "미르", "남" });
                dt.Rows.Add(new object[] { 3, "미자", "여" });
                dt.Rows.Add(new object[] { 4, "미르", "여" });
                dt.Rows.Add(new object[] { 5, "미시", "여" });
            }
    
        }
    }

중복 제거후 Data