C#에서 DataTable에 컬럼(Column)을 추가하는 방법에 대해 설명합니다.
Add() 메서드를 사용
가장 기본적인 방법으로 컬럼의 이름과 타입을 설정합니다.
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));
SetOrdinal() 메서드를 사용하여 원하는 위치(인덱스)에 추가
SetOrdinal() 메서드
- DataColumn을 지정된 위치(인덱스)로 설정합니다.
public void SetOrdinal (int ordinal);
첫 번째 매개변수
- 지정된 위치(인덱스)
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));
dt.Columns.Add("Name", typeof(string)).SetOrdinal(1);
ID 컬럼 다음에 Name 컬럼이 추가되었습니다.
특정 컬럼 다음 위치에 추가
IndexOf() 메서드를 사용하여 특정 컬럼의 위치(인덱스)를 SetOrdinal() 메서드의 매개 변수로 전달합니다.
아래 코드는 Score 컬럼 다음 위치에 Grade 컬럼이 추가됩니다.
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));
dt.Columns.Add("Grade", typeof(int)).SetOrdinal(dt.Columns.IndexOf("Score"));
dt.Columns.Add("Grade", typeof(int)).SetOrdinal(dt.Columns.IndexOf("Score")); 실행 전
dt.Columns.Add("Grade", typeof(int)).SetOrdinal(dt.Columns.IndexOf("Score")); 실행 후
AddRange() 메서드를 사용하여 컬럼 한 번에 추가
AddRange() 메서드를 사용하여 컬럼을 배열로 묶어서 DataTable에 한 번에 추가할 수 있습니다.
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn { ColumnName = "Item", DataType=typeof(string) }
, new DataColumn { ColumnName = "Count", DataType=typeof(int) }
});
행(Row)이 존재하는데, 새로운 컬럼(Column)을 추가하고 Defatult 값을 설정
DefaultValue를 사용하여 컬럼의 Default 값을 설정합니다.
DataColumn col = new DataColumn("DefaultColumn", typeof(string));
col.DefaultValue = "Default Value";
dt.Columns.Add(col);
DefaultColumn 컬럼이 추가 되기 전 DataTable의 구조입니다.
이미 행(row)가 2개 존재합니다.
DefaultColumn 컬럼이 추가 되면서 Default 값이 설정되었습니다.
컬럼이 존재하는지 확인 후 컬럼 추가
Contains 메서드를 사용하여 컬럼명이 존재하는지 확인 후 컬럼을 추가합니다.
Add 메서드의 문제는 컬럼명이 DataTable에 존재하는데, 동일한 컬럼명으로 추가하면 예외가 발생합니다.
이러한 예외를 방지하기 위해 Contains 메서드를 사용하여 컬럼명을 체크합니다.
간혹 DataTable의 컬럼명을 동적으로 처리하는 경우가 있습니다.
저는 동적으로 처리하는 경우 컬럼명을 체크 후 추가합니다.
사용 방법
DataTable dt = new DataTable();
if(!dt.Coulmns.Contains("ID")) {
dt.Columns.Add("ID", typeof(string));
}
if(!dt.Coulmns.Contains("Subject")) {
dt.Columns.Add("Subject", typeof(string));
}
if(!dt.Coulmns.Contains("Score")) {
dt.Columns.Add("Score", typeof(int));
}
'C#' 카테고리의 다른 글
[C#]StringComparison 열거형 (0) | 2021.08.01 |
---|---|
[C#]DataTable 복사(Copy)와 복제(Clone) 방법 (0) | 2021.07.27 |
[C#]DataTable에 행(Row) 추가하는 방법 (1) | 2021.07.26 |
[C#]ref와 out 키워드 (0) | 2021.05.16 |
[C#]Call By Value, Call By Reference (0) | 2021.05.16 |
댓글