我正在尝试向一个新的DataSet X添加一个位于不同DataSet Y中的DataTable。 如果我直接添加它,我会收到以下错误:
DataTable已经属于另一个DataSet。
我是否必须克隆DataTable并将所有行导入其中,然后将新的DataTable添加到新的DataSet中?有没有更好/更简单的方法呢?
答案 0 :(得分:64)
有两种简单的方法可以做到这一点:
DataTable.Copy
使用DataTable.Clone
创建数据表的副本,而不是DataTable.Copy
;然后将副本插入目标DataSet
:
dataSetX.Tables.Add( dataTableFromDataSetY.Copy() );
DataSet.Merge
您也可以使用DataSet.Merge
:
dataSetX.Merge(dataTableFromDataSetY);
但请注意,如果您要使用此方法,则可能需要确保目标DataSet
尚未包含具有相同名称的表:
如果目标DataSet不包含同名的表,则会在数据集内创建表的新副本;
如果目标数据集中已存在同名的表,那么它将与传递给Merge
的表合并,最终会混合使用这两个表。
答案 1 :(得分:3)
使用此通用功能
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 :(得分:2)
这应该对你有用
X.Tables.Add(Y.Tables[<tablename|index>].Copy());
答案 3 :(得分:1)
IEnumerable<DataRow> query = from sourceTbl in sourceTbl.AsEnumerable()
where [any condition you want]
select order;
DataTable boundTable = query.CopyToDataTable<DataRow>();
我不确定如果我理解你的问题。希望这段代码有帮助