Вам придется реализовать интерфейс INotifyPropertyChanged
из ваших классов объектов, а затем перехватывать всякий раз, когда происходит изменение, через соответствующие обработчики событий для вашего класса типов в вашем свойстве DataSource
BindingSource
.
Единственный объект, предлагающий то, что вам требуется, это DataSet
, содержащий как исходное, так и текущее (измененное) состояние постоянного объекта.Затем, когда кто-то отменяет, все, что вам нужно для вызова, - это метод Rollback()
.Когда кто-то принимает изменения, тогда вызовет метод AcceptChanges()
.
Помимо DataSet
, возможно, стоит рассмотреть возможность использования ORM, такого как NHibernate, плюс возможность использовать пользовательскиеобъекты, вместо DataSet
.Поддержание в рабочем состоянии API ISession
в вашей форме позволит ISession отслеживать ваши изменения, какими бы они ни были к любому объекту, если это известно NHibernate.
Другое решение, реализующееИнтерфейс INotifyPropertyChanged
находится в установщике свойств, вы можете хранить оригинальное значение в закрытом поле или для каждого свойства объекта.Вы можете просто иметь абстрактный класс со свойством HasChanges
, возвращающим, является ли каждое свойство его исходным состоянием, а затем возвращать true или false соответственно.
У меня есть вопрос относительно нашего интересного начального обсуждения.Я просто хочу убедиться в одном.Давайте назовем это языковым барьером, если захотим.Но публикация события PropertyChanged
через интерфейс INotifyPropertyChanged
также каким-то образом «откатит» объект до его исходного состояния.Единственная деталь, о которой вам нужно было позаботиться, это то, что если пользователь говорит, что не хочет сохранять изменения, перезагрузите этот CurrentItem из базовой базы данных через класс BackgroundWorker
и все готово!Не отставая от вашего графического интерфейса, ваш пользователь отменил изменения, и вы вернули объект в исходное / исходное состояние!
Что ж, я думаю, здесь достаточно деталей, чтобы составить идею, а также все остальные хорошиеответы, предоставленные другими.Я уверен, что вы найдете способ добиться того, чего хотите.
Лучший успех!=) * * Тысяча двадцать-семь