Грязные записи ado.net в наборе данных - PullRequest
0 голосов
/ 18 января 2010

Я постараюсь объяснить. Я хочу отслеживать грязные записи в моей строке набора данных, которая связана с элементами управления в окне (wpf).

Работает нормально. Допустим, я начинаю редактировать какое-то текстовое поле, привязанное к dataTable в этом наборе данных. После добавления одного символа в текстовое поле набор данных помечается как грязный.

Но если я снова удалю этот символ (восстановлю исходное значение), набор данных все еще будет загрязнен. Я хочу, чтобы после того, как я восстановил исходное значение в dataSet, он стал не грязным, потому что в действительности он больше не грязный.

Есть ли какой-либо метод, который мне нужно вызывать, чтобы набор данных мог пересчитать грязные записи из полей привязки или подобного подхода Спасибо.

Ответы [ 4 ]

1 голос
/ 18 января 2010

Ну, что-то получилось, просто хотел поделиться. Все идет нормально. Спасибо всем за ответы, очень помогли мне. Следующий шаг - встраивание этой функции в пользовательский элемент управления:).

        private bool dirty = false;
        private int currentRowIndex;

        void Products_RowChanged(object sender, System.Data.DataRowChangeEventArgs e)
        {
           currentRowIndex=ProductsViewSource.View.CurrentPosition;
            int i=0;
            foreach (object o in originalProducts[currentRowIndex].ItemArray)
            {
                if (o.Equals(restouranDataSet.Products[currentRowIndex].ItemArray[i]))
                    dirty = false;
                else
                {
                    dirty = true;
                    return;
                }
                i++;
            }
        }
1 голос
/ 18 января 2010

Вам необходимо сохранить копию исходного объекта, установленного для сравнения, и выполнить определение «IsDirty» в точке, в которой вам действительно нужно знать, является ли она грязной, а не в точке, в которой данные изменяются и, следовательно, только может быть грязным.

1 голос
/ 18 января 2010

Вы можете проверить свойство rowstate в datarow, а если Modified, сравнить значения в DataRowVersions Current и Original. Если ваше второе изменение делает значение таким же, как и в оригинале, вы можете вызвать RejectChanges, но это отклонит ВСЕ изменения в этой строке. Вам придется вручную отслеживать каждое поле, так как набор данных сохраняет только изменения для каждой строки или таблицы, и любое изменение является изменением, даже если вы установили одно и то же значение.

1 голос
/ 18 января 2010

DataRow.CancelEdit ()
Или
DataRow.RejectChanges ()
Или
DataSet.RejectChanges ()

Может работать в вашей ситуации.

...