Объединение таблиц данных не изменяет состояние строки - PullRequest
0 голосов
/ 14 января 2019

У меня есть две таблицы данных с идентичной схемой, и я хочу получить различия между ними. Я пытаюсь применить Merge для этого. Код читается проще, поэтому маленький пример:

//Create first datatable
var o = new DataTable{Columns = { "id", "value"}};
//Add a datarow
o.Rows.Add(1, "test");
//Set PK
o.PrimaryKey = new[]{o.Columns[0]};
//Set RowState to Unchanged
o.AcceptChanges();

//Create copy of first datatable
var m = o.Copy();
//Change a value 
m.Rows[0]["value"] = "test2";
//Set RowState to Unchanged
m.AcceptChanges();

//Merge
o.Merge(m);

Вплоть до слияния все работает как положено; У меня есть две таблицы данных, каждая с одной строкой с одинаковыми id, но разными value ("test" и "test2"). После слияния я ожидал, что в datatable o будет одна строка с id = 1 и значением = "test2". Это правда. Я также ожидал, что в одной строке будет RowState="Modified". Это не правда, у него есть RowState="Unchanged". Почему это?

Я прочитал пару ответов на широко похожие вопросы, которые вы должны называть EndEdit() в каждой строке. Конечно, это не может быть ответом, в этом вся цель Merge(), верно?

1 Ответ

0 голосов
/ 14 января 2019

Проверьте метод перегрузки, который можно использовать для сохранения состояния:

preserveChanges Boolean

true, чтобы сохранить изменения в текущем DataTable; иначе false.

Ссылка

Проверьте тест здесь: https://dotnetfiddle.net/KI7xPe

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