在 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();
我需要将一个数据表(在数据集中)复制到一个独立的数据表。我的目的是保留数据表的原始独立副本,以便在我想要的任何时候将其恢复到数据集。
我使用了这段代码: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();