본문 바로가기
C# 기술

[C#] DataTable Copy 데이터 테이블 복사하기

by bryan.oh 2019. 2. 18.
반응형

데이터가 있는 DataTable1 이 있고, 

데이터 그리드에 바인딩 되어있는 DataTable2 가 있을 때, 

 

DataTable1 을 DataTable2 로 복사하면서 데이터그리드에도 반영되도록 하기위한 소스 예제 입니다.

DataTable gv_dtScan = new DataTable();
// 컬럼 추가
gv_dtScan.Columns.Add("userName");
gv_dtScan.Columns.Add("userNumber");
// 데이터 추가
gv_dtScan.Rows.Add("bryan", "101011");
gv_dtScan.Rows.Add("json", "101012");
gv_dtScan.Rows.Add("kevin", "101013");
Console.WriteLine("gv_dtScan rows count = " + gv_dtScan.Rows.Count);

// 데이터 그리드에 바인딩 할 데이터 테이블.
DataTable gv_dtReady1 = new DataTable();
gv_dtReady1 = gv_dtScan.Clone();    // 구조만 복사한다. (컬럼, not row)

// 그리드에 바인딩 시킨다.
dataGridView1.DataSource = gv_dtReady1;


gv_dtReady1 = gv_dtScan.Copy();
//gv_dtScan.AsEnumerable().CopyToDataTable(gv_dtReady1, LoadOption.Upsert);
Console.WriteLine("gv_dtReady1 rows count = " + gv_dtReady1.Rows.Count);

위 소스의 19번째 줄에서 처럼 DataTable.Copy() 를 사용하면 결과는 아래와 같습니다.

 

 

데이터 그리드에 바인딩이 깨졌습니다.

gv_dtReady1 에는 데이터가 있는데 말이죠.

 

그렇다면 데이터 그리드뷰에 바로 반영되게 하려면 아래와 같이 하면 됩니다.

//gv_dtReady1 = gv_dtScan.Copy();
gv_dtScan.AsEnumerable().CopyToDataTable(gv_dtReady1, LoadOption.Upsert);
 

 

결과는?

 

 

잘나옵니다.

 

728x90
반응형

댓글