在 C# 中创建 Datatable 的未继承副本

Create an uninheriated copy of Datatable in C#

我需要将一个数据表(在数据集中)复制到一个独立的数据表。我的目的是保留数据表的原始独立副本,以便在我想要的任何时候将其恢复到数据集。 我使用了这段代码:copiedDataTable = frm.DataSet.Tables["myoriginaldatatable"].Copy(); 但它的工作方式就像 Clone() 命令一样,并创建了原始数据表的结构,但是行是空的,因为原始数据表的行不是我追踪的空行。

在另一次尝试中,我使用了以下代码:

copiedDataTable = frmMainForm.DataSet.Tables["originalDataTable"];

此命令可以很好地复制原始数据表。但是当我从数据集中清除原始数据表以恢复复制的数据表时,复制的数据表也被清除并且行变为空。(通过此代码恢复:)

frmMainForm.DataSet.Tables["originalDataTable"].Clear();
                frmMainForm.DataSet.Tables.Remove("originalDataTable");
                frmMainForm.projectDataSet.Tables.Add(copiedDataTable);

如何制作独立副本?

Copy() 方法也会复制数据。

根据 msdn "Copy creates a new DataTable with the same structure and data as the original DataTable. To copy the structure to a new DataTable, but not the data, use Clone."

当您手动将行插入数据 table 时,新插入的行处于新行状态。因此,此类行中的值不能是 return。即使您更新 DataTable 单元格中的任何值,该单元格值的状态也是已编辑。如果不接受更改,您将无法 return 来自数据 table 的更新值。

例如,如果您更新了任何值,例如

dt.Rows[0]["MyCell"] = "MyValue"; //before that the value was "Old Value"

现在,如果我尝试从该单元格中获取该值,那么它将 return 旧值或空值(如果没有)。

string myValue = dt.Rows[0]["MyCell"];

要结束初始化,您必须在更新值后调用数据table的AcceptChanges()方法。

dt.Rows[0]["MyCell"] = "MyValue";
dt.AcceptChanges();