繁体   English   中英

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

[英]Copy DataTable from one DataSet to another

我正在尝试向一个新的DataSet X添加一个DataTable,它位于不同的DataSet Y中。如果我直接添加它,我会收到以下错误:

DataTable已经属于另一个DataSet。

我是否必须克隆DataTable并将所有行导入其中,然后将新的DataTable添加到新的DataSet中? 有没有更好/更简单的方法呢?

有两种简单的方法可以做到这一点:

DataTable.Copy

而不是DataTable.Clone ,使用DataTable.Copy来创建数据表的副本; 然后将副本插入目标DataSet

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

DataSet.Merge

你也可以使用DataSet.Merge

dataSetX.Merge(dataTableFromDataSetY);

但请注意,如果要使用此方法,则可能需要确保目标DataSet尚未包含具有相同名称的表:

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

  • 如果目标数据集中已存在同名的表,那么它将与传递给Merge ,最终会混合使用两者。

使用此通用功能

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);

这应该适合你

X.Tables.Add(Y.Tables[<tablename|index>].Copy());
IEnumerable<DataRow> query =  from sourceTbl in sourceTbl.AsEnumerable()
where [any condition you want]
select order;
DataTable boundTable = query.CopyToDataTable<DataRow>();

我不确定如果我理解你的问题。希望这个代码有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM