Как создать новый DataTable со структурой столбцов из другого DataTable?

Как и в заголовке - вопрос:

Как создать новый DataTable со структурой столбцов из другого DataTable?

Мне нужен пустой DataTable для использования в нем метода .Rows.Add().

код:

DataTable dtFirst = new DataTable();
dtFirst.Columns.Add("column1");
dtFirst.Columns.Add("column2");
dtFirst.Columns.Add("column3");

FillDataTableFirst(); // before I create second DataTable - dtFirst is filled

// here I need dtSecond DataTable with same column structure
// i cant just copy first data table, because it contains data

DataTable dtSecond = ???;

Ответ 1

Вы ищете метод DataTable.Clone() (доступный с версии 1.1).

В документации :

Клон создает новый DataTable с той же структурой, что и оригинал DataTable, но не копирует данные (новый DataTable не будет содержат любые DataRows). Скопировать структуру и данные в новую DataTable, используйте Копировать.

В вашем примере:

DataTable dtFirst = new DataTable();
dtFirst.Columns.Add("column1");
dtFirst.Columns.Add("column2");
dtFirst.Columns.Add("column3");

FillDataTableFirst(); // before I create second DataTable - dtFirst is filled

DataTable dtSecond = dtFirst.Clone();

Ответ 2

Просто используйте DataTable.Clone, который клонирует схему, но не данные:

DataTable dtSecond = dtFirst.Clone(); // empty

Теперь вы можете начать добавлять новые строки:

DataRow newRow = dtSecond.Rows.Add();
newRow.SetField("column1", "Value1");
newRow.SetField("column2", "Value2");
newRow.SetField("column3", "Value3");

Ответ 3

используйте метод Clone() класса DataTable.