Как получить столбцы из датарова? - PullRequest
10 голосов
/ 10 мая 2009

У меня есть коллекция строк (строки DataRow []). И я хочу импортировать все строки в другой DataTable (DataTable dt).

Но как?

код

DataTable dt;
if (drs.Length>0)
{
    dt = new DataTable();

    foreach (DataRow row in drs)
    {
        dt.Columns.Add(row???????)
    }

    // If it possible, something like that => dt.Columns.AddRange(????????)

    for(int i = 0; i < drs.Length; i++)
    {
        dt.ImportRow(drs[i]);
    }
}

Ответы [ 3 ]

17 голосов
/ 10 мая 2009

Если все строки имеют одинаковую структуру, самый простой вариант - клонировать старую таблицу, пропуская данные:

DataTable dt = drs[0].Table.Clone();

В качестве альтернативы, что-то вроде:

foreach(DataColumn col in drs[0].Table.Columns)
{
    dt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
}
4 голосов
/ 10 мая 2009

Если ваши DataRows взяты из таблицы данных с определенными в ней столбцами,

DataRow[] rows;

DataTable table = new DataTable();
var columns = rows[0].Table.Columns;

table.Columns.AddRange(columns.Cast<DataColumn>().ToArray());

foreach (var row in rows)
{
    table.Rows.Add(row.ItemArray);  
}
1 голос
/ 10 мая 2009

Как насчет

DataTable dt = new DataTable;
foreach(DataRow dr in drs)
{
    dt.ImportRow(dr);
}

Обратите внимание, что это работает, только если drs является DataRowCollection. Отдельные строки (не в DataRowCollection игнорируются).

Не забудьте позвонить в AcceptChanges.

...