DataTable을 복사하는 DataTable.Copy() 메소드와 DataTable을 복제하는 DataTable.Clone() 메소드를 정리합니다.
Copy()
DataTable의 컬럼(Column), 행(Row), 행의 상태(RowState)를 복사합니다.
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));
DataRow rowEx1 = dt.NewRow();
rowEx1["ID"] = "A";
rowEx1["Subject"] = "Java Programming";
rowEx1["Score"] = 100;
dt.Rows.Add(rowEx1);
DataRow rowEx2 = dt.NewRow();
rowEx2["ID"] = "B";
rowEx2["Subject"] = "C Programming";
rowEx2["Score"] = 80;
dt.Rows.Add(rowEx2);
위 코드를 실행한 dt의 구조입니다.
Copy() 메소드를 사용하여 dt를 dtCopy에 복사합니다.
DataTable dtCopy = dt.Copy();
컬럼과 행이 복사되었습니다.
행의 상태(RowState)도 복사되는가?
행의 상태가 복사되는지 확인하기 위한 전체 코드입니다.
// 1. DataTable dt에 컬럼 생성 및 행 추가
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));
DataRow rowEx1 = dt.NewRow();
rowEx1["ID"] = "A";
rowEx1["Subject"] = "Java Programming";
rowEx1["Score"] = 100;
dt.Rows.Add(rowEx1);
DataRow rowEx2 = dt.NewRow();
rowEx2["ID"] = "B";
rowEx2["Subject"] = "C Programming";
rowEx2["Score"] = 80;
dt.Rows.Add(rowEx2);
// 2. Console에 dt의 Row 상태 확인
Console.WriteLine("*****dt의 RowState*****");
foreach (DataRow row in dt.Rows)
{
Console.WriteLine(row.RowState.ToString());
}
// 3. dt를 dtCopy에 복사
DataTable dtCopy = dt.Copy();
// 4. 상태도 복사되었는지 확인
Console.WriteLine("\n*****dtCopy의 RowState*****");
foreach (DataRow row in dtCopy.Rows)
{
Console.WriteLine(row.RowState.ToString());
}
dt의 행(row)의 수만큼 forEach문을 실행합니다.
각 행의 상태를 콘솔에 출력합니다.
// 2. Console에 dt의 Row 상태 확인
Console.WriteLine("*****dt의 RowState*****");
foreach (DataRow row in dt.Rows)
{
Console.WriteLine(row.RowState.ToString());
}
dt에는 2개의 행이 존재하며, 2개의 행은 Added 상태입니다.
dt를 dtCopy에 복사하고 dtCopy의 각 행의 상태를 콘솔에 출력합니다.
// 3. dt를 dtCopy에 복사
DataTable dtCopy = dt.Copy();
// 4. 상태도 복사되었는지 확인
Console.WriteLine("\n*****dtCopy의 RowState*****");
foreach (DataRow row in dtCopy.Rows)
{
Console.WriteLine(row.RowState.ToString());
}
행의 상태도 복사가 됩니다.
Clone()
DataTable의 컬럼(Column)을 복사합니다.
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));
DataRow rowEx1 = dt.NewRow();
rowEx1["ID"] = "A";
rowEx1["Subject"] = "Java Programming";
rowEx1["Score"] = 100;
dt.Rows.Add(rowEx1);
DataRow rowEx2 = dt.NewRow();
rowEx2["ID"] = "B";
rowEx2["Subject"] = "C Programming";
rowEx2["Score"] = 80;
dt.Rows.Add(rowEx2);
위 코드를 실행한 dt의 구조입니다.
Clone() 메소드를 사용하여 dt를 dtCopy에 복제합니다.
DataTable dtCopy = dt.Clone();
컬럼만 복사되었으며, 행은 복사되지 않았습니다.
요약
Copy() 메소드
DataTable의 컬럼, 행, 행의 상태를 복사합니다.
Clone() 메소드
DataTable의 컬럼만 복사합니다.
즉, DataTable의 구조를 복사 합니다.
반응형
'C#' 카테고리의 다른 글
[C#]DataTable 컬럼(Column) 삭제 방법 (0) | 2021.08.07 |
---|---|
[C#]StringComparison 열거형 (0) | 2021.08.01 |
[C#]DataTable에 컬럼(Column) 추가하는 방법 (0) | 2021.07.26 |
[C#]DataTable에 행(Row) 추가하는 방법 (1) | 2021.07.26 |
[C#]ref와 out 키워드 (0) | 2021.05.16 |
댓글