Почему метод C# DataTable.remove() удаляет значение, переданное через параметр?

Цель состоит в том, чтобы переместить строку в DataTable на первую позицию, поэтому, как только я получаю строку, я удаляю ее, а затем вставляю в первую позицию.

 DataRow[] dr = DataSet1.Tables[0].Select("field1 = HELLO");

 DataSet2.Tables[0].Rows.Remove(dr[0]); // Here dr[0] is removed. Why?
 DataSet2.Tables[0].Rows.InsertAt(dr[0], 0); // Now a null value is inserted

вторая строка удаляет как значение в de DataTable, так и dr[0], переданное в качестве параметра, поэтому я не могу вставить его в первую позицию.


person anmarti    schedule 11.12.2012    source источник


Ответы (2)


Это потому, что dr[0] — это всего лишь ссылка, вам нужно будет клонировать его, а затем удалить.

person Luis Tellez    schedule 11.12.2012
comment
Да, но dr[0] взят из другого набора данных Dataset1, из которого я хочу удалить. - person anmarti; 11.12.2012
comment
Если вы не сделаете копию, это тот же объект, и он потеряет свою ценность, как только вы его удалите. Сделайте копию, удалите оригинал и вставьте новый 1. - person Luis Tellez; 11.12.2012
comment
Я не понимаю, почему это один и тот же объект, поскольку я беру из разных источников. - person anmarti; 11.12.2012

Попробуйте следующую логику...

var row = DataSet2.Tables[0].Select("field1 = HELLO").First();
var oldIndex = DataSet2.Tables[0].Rows.IndexOf(row);
DataSet2.Tables[0].Rows.InsertAt(row, 0);
DataSet2.Tables[0].Rows.RemoveAt(oldIndex);

это просто логика.. поэтому игнорируются нулевые проверки и обработка исключений

person humblelistener    schedule 11.12.2012