将 DataTable 从一个 DataSet 复制到另一个
Posted
技术标签:
【中文标题】将 DataTable 从一个 DataSet 复制到另一个【英文标题】:Copy DataTable from one DataSet to another 【发布时间】:2011-06-21 06:58:36 【问题描述】:我正在尝试向新数据集 X 添加一个位于不同数据集 Y 内的数据表。 如果我直接添加它,我会收到以下错误:
DataTable 已经属于另一个 DataSet。
我是否必须克隆 DataTable 并将所有行导入到其中,然后将新的 DataTable 添加到新的 DataSet 中?有更好/更简单的方法吗?
【问题讨论】:
【参考方案1】:使用这个通用函数
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】:有两种简单的方法可以做到这一点:
DataTable.Copy
不要使用DataTable.Clone
,而是使用DataTable.Copy
创建数据表的副本;然后将副本插入目标DataSet
:
dataSetX.Tables.Add( dataTableFromDataSetY.Copy() );
DataSet.Merge
您也可以为此使用DataSet.Merge
:
dataSetX.Merge(dataTableFromDataSetY);
但是请注意,如果您要使用此方法,您可能需要确保您的目标 DataSet
尚未包含同名的表:
如果目标数据集不包含同名表,则在数据集中创建表的新副本;
如果同名表已经在目标数据集中,那么它将与传递给Merge
的表合并,最终得到两者的混合。
【讨论】:
【参考方案3】:IEnumerable<DataRow> query = from sourceTbl in sourceTbl.AsEnumerable()
where [any condition you want]
select order;
DataTable boundTable = query.CopyToDataTable<DataRow>();
我不确定我是否正确理解了您的问题。希望此代码有所帮助
【讨论】:
【参考方案4】:这应该对你有用
X.Tables.Add(Y.Tables[<tablename|index>].Copy());
【讨论】:
以上是关于将 DataTable 从一个 DataSet 复制到另一个的主要内容,如果未能解决你的问题,请参考以下文章
从 DataTable/DataSet 中的搜索创建 DataRow
DataSet.Merge - 将类型化的 DataSet/DataTable 合并到另一个 DataSet 并使用它
c#winform 的dataset的datatable中怎么手动添加行