Назначить DataTable для DataTable - PullRequest
2 голосов
/ 10 июля 2011

Я хочу присвоить DataTable ( dataTable1 ) другому DataTable ( dataTable2 ) и удалить некоторые столбцы в последнем DataTable.Например, у меня есть следующий код:

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

Оказывается, что и DataTable ( dataTable1 и dataTable2 ) удаляют столбцы.Я не понимаю, почему для dataTable1 также удаляются column1 и column2 , а я удаляю только столбцы в dataTable2 .

[ИЗМЕНЕНО - с ответом]

Следует использовать Clone() И ImportRow() вместо назначения указателя.

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

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

Это происходит потому, что dataTable2 указывает на ту же таблицу, что и dataTable1.Чтобы решить эту проблему, используйте метод Clone в DataTable, чтобы создать новый DataTable с такой же структурой:

        DataTable dataTable2  = dataTable1.Clone();  
        dataTable2.Columns.Remove("column1");
        dataTable2.Columns.Remove("column2");
0 голосов
/ 25 октября 2013

datatable.clone () передается по ссылке. Вы должны дать его по значению.

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

Теперь удаление из таблицы данных2 не влияет на таблицу данных1

0 голосов
/ 21 января 2013

datatable является ссылочным типом, поэтому обе таблицы изменяются, если изменения вносятся в одну.и вместо циклического перемещения по строкам данных вы можете либо вызвать dataTable1.Copy (), чтобы скопировать данные и схему в другой источник данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...