Подтвердить что ты не робот

Скопировать DataTable из одного DataSet в другой

Я пытаюсь добавить в новый DataSet X DataTable, который находится внутри другого DataSet Y. Если я добавлю его напрямую, я получаю следующую ошибку:

DataTable уже принадлежит другому DataSet.

Нужно ли клонировать DataTable и импортировать все строки в него, а затем добавить новый DataTable в новый DataSet? Есть ли лучший/простой способ сделать это?

4b9b3361

Ответ 1

Есть два простых способа сделать это:

DataTable.Copy

Вместо DataTable.Clone используйте DataTable.Copy, чтобы создать копия вашей таблицы данных; затем вставьте копию в цель DataSet:

dataSetX.Tables.Add( dataTableFromDataSetY.Copy() );

DataSet.Merge

Вы также можете использовать DataSet.Merge:

dataSetX.Merge(dataTableFromDataSetY);

Обратите внимание, что если вы собираетесь использовать этот метод, вы можете убедиться, что ваша целевая DataSet еще не содержит таблицу с тем же именем:

  • Если целевой DataSet не содержит таблицу с тем же именем, внутри набора данных создается новая копия таблицы;

  • Если таблица с таким же именем уже находится в целевом наборе данных, тогда она будет слита с той, которая была передана в Merge, и вы получите комбинацию из двух.

Ответ 2

Используйте эту общую функцию

public DataTable CopyDataTable(DataTable dtSource, int iRowsNeeded)
{

    if (dtSource.Rows.Count > iRowsNeeded)
    {
        // cloned to get the structure of source
        DataTable dtDestination = dtSource.Clone();
        for (int i = 0; i < iRowsNeeded; i++)
        {
            dtDestination.ImportRow(dtSource.Rows[i]);
        }
        return dtDestination;
    }
    else
        return dtSource;
}

Предположим, вы хотите скопировать первую таблицу sourceSet в destinationSet.
Назовите его как

DataTable destinationTable = CopyDataTable(sourceSet.Tables[0], sourceSet.Tables[0].Rows.Count);
DataSet destinationSet = new DataSet();
destinationSet.Tables.Add(destinationTable);

Ответ 3

Это должно работать для вас

X.Tables.Add(Y.Tables[<tablename|index>].Copy());

Ответ 4

IEnumerable<DataRow> query =  from sourceTbl in sourceTbl.AsEnumerable()
where [any condition you want]
select order;
DataTable boundTable = query.CopyToDataTable<DataRow>();

Я не уверен, если я правильно понял ваш вопрос. Надеюсь, что этот код поможет