2009. 10. 28. 14:39

포스트를 열심히 올리고자 마음 먹었지만
전혀 올리지 못 하고있었다. (마음만 앞섰을 뿐이고.. 그리고 귀찮았을 뿐이고..)
뭐 암튼 간만에 포스팅을 한다.

c#에서 DataTable 클래스에서 DataTable끼리의 Merge와 Sort가 있다. (그 밖에도 많겠지...)

대략 소스와 주석으로 설명을 대신하고자 한다.

 private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = GetData(1, 3);
            DataTable dt2 = GetData(2, 5);

// Merge
            DataTable dt3 = dt.Copy();
            dt3.PrimaryKey = new DataColumn[] { dt3.Columns["A"] };
            dt3.Merge(dt2);

// Sort
            DataView view = dt3.DefaultView;
            view.Sort = "B DESC, A ASC, C DESC";

            this.dataGridView1.DataSource = dt;
            this.dataGridView2.DataSource = dt2;
            this.dataGridView3.DataSource = view.ToTable();
        }

        DataTable GetData(int from, int to)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("A");
            dt.Columns.Add("B");
            dt.Columns.Add("C");
            Random rnd = new Random((int)DateTime.Now.Ticks);
            for (int i = from; i <= to; i++)
            {
                DataRow dr = dt.NewRow();
                dr["A"] = i;
                dr["B"] = rnd.Next(1, 5);
                dr["C"] = rnd.Next(1, 5);
                dt.Rows.Add(dr);
            }
            return dt;
        }


추가적인 설명으로
a.Merge(b); 처럼 Merge할 경우 b테이블의 데이터를 a테이블에 포함시키는 거라 할 수 있다.
만약 DataTable의 PrimaryKey 설정을 한다면 b테이블 데이터중 a테이블의 Key 컬럼과 중복되는 데이터를 제외한 데이터가 a테이블로 포함된다. (이해를 돕고자 이미지를 첨부)

PrimaryKey 설정 전

PrimaryKey 설정 후






Posted by CoolDragon