我正在寻找一种简单的方法来克隆一个DataRow。有点像对该行进行快照并将其保存。然后,original Row的值可以自由更改,但我们仍然有另一个保存的副本,该副本不会更改。这是正确的做法吗?
DataRow Source, Destination;
// Assume we create some columns and fill them with values
Destination.ItemArray = Source.ItemArray;
这是否只是将快照的ItemArray引用设置为指向源代码中的引用,还是实际上创建了一个单独的副本?我应该这样做吗?
Destination.ItemArray = Source.ItemArray.Clone();
编辑:我认为第二个代码片段实际上并没有被编译。
发布于 2020-02-24 23:10:02
您似乎不想保留整个DataTable作为副本,因为您只需要一些行,对吧?如果您有一个可以在表上使用select指定的creteria,那么可以将这些行复制到DataRow的一个额外的备份数组中,如下所示
DataRow[] rows = sourceTable.Select("searchColumn = value");
.Select()函数有几个选项,例如,可以将这个选项读取为SQL
SELECT * FROM sourceTable WHERE searchColumn = value;
然后,您可以如上所述导入所需的行。
targetTable.ImportRows(rows[n])
...for任意有效的n,但每个表中的列必须相同。
关于ImportRow,你应该知道的是,在运行时使用主键时会出现错误!
首先,我想检查是否已经存在同样由于缺少主键而失败的行,但是检查总是失败。最后,我决定完全清除现有行,并再次导入我想要的行。
第二个问题确实有助于理解发生了什么。我使用import函数的方法是在一列中复制具有交换条目的行。我意识到它总是变化的,它仍然是对数组中的行的引用。我首先必须导入原始文件,然后更改我想要的条目。
引用还解释了当我第一次尝试导入行时出现的主键错误,因为它实际上是双倍的。
发布于 2015-04-05 03:03:02
但为了确保新表中的新行可以访问,您需要关闭该表:
DataTable destination = new DataTable(source.TableName);
destination = source.Clone();
DataRow sourceRow = source.Rows[0];
destination.ImportRow(sourceRow);
https://stackoverflow.com/questions/12025012
复制相似问题