Когда я создаю новый набор данных из кода или извлекаю его через адаптер данных из базы данных, изменение содержимого строки приводит к изменению состояния строки.Это поведение по умолчанию, и все работает правильно:
DataSet ds = new DataSet();
DataTable table = new DataTable("Cities");
table.Columns.Add("CityName", typeof(string));
table.Columns.Add("CountryName", typeof(string));
ds.Tables.Add(table);
table.Rows.Add("New York", "USA"); // state is Added for row 0
table.Rows.Add("London", "UK"); // state is Added for row 1
table.AcceptChanges(); // state is Unchanged for both rows
table.Rows[0][1] = "Seattle"; // state is Modified for row 0
Когда я получаю набор данных из базы данных, затем отправляю его через wcf (да, я знаю, что это плохая практика, но это другая история, я используюстандартное поведение) и получить его на прокси, его datarow все еще "осведомлены о состоянии".Строки данных по-прежнему реагируют на изменения своих значений.
Редактировать: После дальнейшей отладки проблемы я обнаружил, что набор данных правильно десериализован и отражает изменения в клиенте wcf (состояние строки соответствует модификациизначение ячейки).Возможность отражения изменений, похоже, теряется после того, как каждая из DataTable привязана (привязка Windows Forms, размещенная в WPF) к объекту электронной таблицы FarPoint:
sheet = new SheetView("Sample");
DataTable table = obtainedDataSet.Tables[0]; // RowState is correct
sheet.DataSource = table; // from now on, RowState is "corrupt"
Таким образом, с точки зрения привязки таблиц набора данных кв объекте FarPoint Spread Sheet строки «неосведомлены о состоянии».Я могу изменить их содержимое или явно вызвать SetModified, но ни одно из действий не меняет свое состояние строки на измененное:
obtainedDataSet.Tables[0].Rows[0][1] = "Seattle"; // state is Unchanged
obtainedDataSet.Tabels[0].SetModified(); // state is Unchanged
Теперь есть какая-то возможность убедить набор данных в том, что он будет мудрым, и начать отражать его изменения, или мне нужноРассмотреть другой подход?Кто-нибудь понял, что может быть не так (привязка себя или компонента FarPoint, неправильный шаблон)?