Привязка данных нарушает функциональность DataRow.RowState
Когда я создаю новый набор данных из кода или извлекаю его через адаптер данных из базы данных, изменение содержимого строки приводит к изменению состояния строки. Это поведение по умолчанию, и все работает правильно:
DataSet ds = new DataSet (); Таблица данных = новая таблица данных ("Города"); table.Columns.Add("CityName", typeof(string)); table.Columns.Add("CountryName", typeof(string)); ds.Tables.Add(таблица); table.Rows.Add ("Нью-Йорк", "США"); // добавлено состояние для строки 0 table.Rows.Add("Лондон", "Великобритания"); // добавлено состояние для строки 1 table.AcceptChanges (); // состояние не изменяется для обеих строк table.Rows[0][1] = "Сиэтл"; // состояние изменено для строки 0
Когда я извлекаю набор данных из базы данных, затем отправляю его через wcf (да, я знаю, что это плохая практика, но это другая история, я использую стандартное поведение) и получаю его на прокси-сервере, его базы данных все еще находятся в состоянии знают". Строки данных по-прежнему реагируют на изменения своих значений.
Редактировать: После дальнейшей отладки проблемы я обнаружил, что набор данных правильно десериализован и отражает изменения в клиенте wcf (состояние строки соответствует изменению значения ячейки). Возможность отражения изменений, похоже, теряется после того, как каждая из DataTable привязана (привязка Windows Forms к WPF) к объекту электронной таблицы FarPoint:
лист = новый SheetView("Образец"); DataTable table = gotDataSet.Tables[0]; // RowState является правильным sheet.DataSource = table; // с этого момента RowState "поврежден"
Таким образом, с точки зрения привязки таблиц набора данных к объекту FarPoint Spread Sheet строки "неосведомлены о состоянии". Я могу изменить их содержимое или явно вызвать SetModified, но ни одно действие не изменяет его состояние строки на измененное:
gotDataSet.Tables[0].Rows[0][1] = "Сиэтл"; // состояние не изменилось obtainedDataSet.Tabels[0].SetModified(); // состояние не изменилось
Есть ли какая-то возможность убедить набор данных в том, чтобы он снова был мудрым и начал отражать его изменения, или мне нужно рассмотреть другой подход? Кто-нибудь понял, что может быть не так (связывание себя или компонента FarPoint, неправильный шаблон)?
3 ответа
Ну, похоже, проблема была в элементе управления FarPoint Spread. Версия 5.0 нарушила функциональность, и ребята из GrapeCity исправили ошибку в версии 5.0.3518, которая теперь отлично работает.
Попробуйте метод EndEdit() в объекте DataTable или DataRow перед вызовом DataAdapter.Update()
Я столкнулся с подобной ситуацией в одной форме, и я понял, что проблема была в привязке, сделанной к свойству ToolTip меток. Сначала я понял, что когда я изменил значение для нуля с нуля на некоторую строку, проблема исчезла, но после некоторых других изменений, внесенных в проект, проблема возникла снова. Когда я удалил привязку к свойству ToolTip, проблема снова исчезла. Тем не менее я не знаю, навсегда ли.