【问题标题】:Assign a DataTable to a DataTable将 DataTable 分配给 DataTable
【发布时间】:2011-10-02 05:42:25
【问题描述】:

我想将DataTable (dataTable1) 分配给另一个DataTable (dataTable2) 并删除后者DataTable 中的一些列。例如我有以下代码:

DataTable dataTable2 = dataTable1;
dataTable2.Columns.Remove("column1");
dataTable2.Columns.Remove("column2");

原来DataTabledataTable1dataTable2)都删除了列。我不明白为什么 dataTable1 会同时删除 column1column2,而我只删除 dataTable2 中的列。

[已编辑 - 有答案]

应该使用Clone() AND ImportRow() 而不是指针赋值。

DataTable dataTable2 = dataTable1.Clone()
for (int i = 0; i < dataTable1.Rows.Count; i++)
{
   dataTable2.ImportRow(dataTable1.Rows[i]);
}

【问题讨论】:

    标签: c# wpf datatable


    【解决方案1】:

    datatable.clone() 是通过引用传递的。你必须按价值给它。

    DataTable dataTable2=dataTable1.Copy(); dataTable2.Columns.Remove("column1"); dataTable2.Columns.Remove("column2");

    现在从 datatable2 中删除不会影响 DataTable1

    【讨论】:

      【解决方案2】:

      datatable 是引用类型,因此如果在一个表中进行更改,这两个表都会更改。而不是循环遍历数据行,您可以调用 dataTable1.Copy() 将数据和架构复制到另一个数据表。

      【讨论】:

        【解决方案3】:

        发生这种情况是因为 dataTable2 指向与 dataTable1 相同的表。要解决此问题,请使用 DataTable 的 Clone 方法创建一个具有相同结构的新 DataTable:

                DataTable dataTable2  = dataTable1.Clone();  
                dataTable2.Columns.Remove("column1");
                dataTable2.Columns.Remove("column2");
        

        【讨论】:

        • (@)platon,非常感谢。此外,似乎 Clone() 只克隆模式而不是数据。所以我也必须运行一个循环来导入行。编辑了我的问题的答案。
        • @KMC,使用DataTable.Copy方法创建一个结构和Data相同的表。在这种情况下,不需要导入行。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 2011-09-15
        • 2012-10-29
        • 1970-01-01
        • 2013-09-20
        • 2011-08-06
        • 1970-01-01
        相关资源
        最近更新 更多