別のDataSet Y内にあるDataTableを新しいDataSet Xに追加しようとしています。直接追加すると、次のエラーが表示されます。
DataTableはすでに別のDataSetに属しています。
DataTableを複製してすべての行をインポートし、新しいDataTableを新しいDataSetに追加する必要がありますか?それを行うためのより良い/簡単な方法はありますか?
これを行うには、2つの簡単な方法があります。
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);
これはあなたのために働くはずです
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>();
私はあなたの質問を適切に理解したかどうかわかりません。このコードが役立つことを願っています