将一个DataTable赋给另一个DataTable

本文关键字:DataTable 另一个 一个 | 更新日期: 2023-09-27 18:01:36

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

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

结果是DataTable (dataTable1dataTable2)都删除了列。我不明白为什么dataTable1会有column1column2被删除,而我只是删除列在dataTable2

[EDITED - with answer]

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

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

将一个DataTable赋给另一个DataTable

这是因为dataTable2和dataTable1指向同一个表。为了解决这个问题,使用DataTable的Clone方法创建一个具有相同结构的新DataTable:

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

datatable是引用类型,所以如果在一个表中进行更改,两个表都会更改。而不是循环通过数据行,你可以调用dataTable1.Copy()复制数据和模式到另一个数据表

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

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

现在删除From datatable2不影响DataTable1