从一个 DataSet 复制 DataTable 到另一个 DataSet

26

我试图将另一个DataSet Y中的一个DataTable添加到新的DataSet X中。如果我直接添加,会出现以下错误:

DataTable already belongs to another DataSet.

我需要克隆DataTable并将所有行导入其中,然后将新的DataTable添加到新的DataSet中吗?是否有更好/更容易的方法来完成这个任务?

4个回答

74

有两种简单的方法可以实现这个:

DataTable.Copy

使用 DataTable.Copy 代替 DataTable.Clone 来创建数据表的副本,然后将该副本插入到目标 DataSet 中:

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

DataSet.Merge

您还可以使用DataSet.Merge来完成此操作:

dataSetX.Merge(dataTableFromDataSetY);

请注意,如果您要使用这种方法,您可能需要确保您的目标 DataSet 不已经包含了同名的表:

  • 如果目标 DataSet 不包含同名表,则在数据集中创建一个新的表副本;

  • 如果目标 DataSet 中已经存在同名表,则会将其与传递给 Merge 的表合并,最终产生两个表的混合。


4
使用这个通用函数。
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);

2
这应该适用于您。
X.Tables.Add(Y.Tables[<tablename|index>].Copy());

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

我不确定我是否正确理解了你的问题。希望这段代码能够帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接