포스트를 열심히 올리고자 마음 먹었지만
전혀 올리지 못 하고있었다. (마음만 앞섰을 뿐이고.. 그리고 귀찮았을 뿐이고..)
뭐 암튼 간만에 포스팅을 한다.
c#에서 DataTable 클래스에서 DataTable끼리의 Merge와 Sort가 있다. (그 밖에도 많겠지...)
대략 소스와 주석으로 설명을 대신하고자 한다.
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = GetData(1, 3);
{
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);
dt3.PrimaryKey = new DataColumn[] { dt3.Columns["A"] };
dt3.Merge(dt2);
// Sort
DataView view = dt3.DefaultView;
view.Sort = "B DESC, A ASC, C DESC";
view.Sort = "B DESC, A ASC, C DESC";
this.dataGridView1.DataSource = dt;
this.dataGridView2.DataSource = dt2;
this.dataGridView3.DataSource = view.ToTable();
}
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");
{
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);
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 설정 후