C# 두개의 Datatable 합치기

만약
Dt a 의 조회값이
Columns →
A l 1 l 2 l
B l 2 l 3 l

Dt b 의 조회 값이
A l 0 l 0 l 4 l
C l 1 l 2 l 3 l

일때 두개의 dt를 합친 값이 아래와 같이 나오려면 어떻게 해야할까요?
A l 1 l 2 l 4 l
B l 2 l 3 l 0 l
C l 1 l 2 l 3 l

DataTable의 Merge() 메서드로 합칠 수 있습니다.


// 테이블 A
DataTable dt_a = new DataTable();
dt_a.Columns.Add("Col1");
dt_a.Columns.Add("Col2");
dt_a.Columns.Add("Col3");
// PK 설정 [데이터 합칠 기준]
dt_a.PrimaryKey = new DataColumn[] { dt_a.Columns[0] };
dt_a.Rows.Add("A", 1, 2);
dt_a.Rows.Add("B", 2, 3);

// 테이블 B
DataTable dt_b = new DataTable();
dt_b.Columns.Add("Col1");
dt_b.Columns.Add("Col2");
dt_b.Columns.Add("Col3");
dt_b.Columns.Add("Col4");
// PK 설정 [데이터 합칠 기준]
dt_b.PrimaryKey = new DataColumn[] { dt_b.Columns[0] };
dt_b.Rows.Add("A", 0, 0, 4);
dt_b.Rows.Add("C", 1, 2, 3);

// Merge
dt_b.Merge(dt_a, false, MissingSchemaAction.AddWithKey);
dt_a.Merge(dt_b, false, MissingSchemaAction.AddWithKey);

[결과]
테이블A
image

2개의 좋아요

아 PK를 설정하면 되는거군요!!
그냥 Merge 했을때 조회된 값이 밑으로 븥어서 안되나 했는데
감사합니다.
위 내용대로 적용해 보겠습니다!!

혹시 알려주신 로직에서 빈칸에 0을 넣고 싶으면 어찌해야 할까요?

null값을 다른 대체 값으로 처리 하는 옵션이나 메서드는 없습니다.


DataTable 데이터 대상으로 null 값을 다른 값으로 처리하고 싶다면 모든 값을 순회해서 바꿔야 합니다.


그런데 DataTable이 원본 데이터라고 간주 한다면 이 방법은 좋지 않습니다.

원본 데이터 자체가 변조되어 제공 되는 것 보단

원본 데이터를 사용하는 측에서 처리 하는 것이 좋습니다.


저라면 DataTable을 사용하는 바인딩 또는 컨트롤 자체에서 null값으로 사용 된다면 0으로 표시 하도록 하는 구현을 할 것 같습니다.

사용 하시는 환경이 WPF라면 컨버터를 활용해서 쉽게 구현 가능 합니다.

1개의 좋아요