CancelEdit на bindingsource не отменяет все отредактированные поля объекта

У меня есть bindingList<T> что каждый объект связующего списка реализует INotifyPropertyChanged, В моей WinForm я использовал BindingSource и установить источник данных для него BindingList<T> затем привязать текстовое поле к свойствам каждого элемента в BindingList(я использую эту winform для операций CRUD):

tbName.DataBindings.Add("Text", myBindingSource, "Name", true);
tbFamily.DataBindings.Add("Text", myBindingSource, "Family", true);

а также у меня есть кнопка для отмены редактирования. но когда я редактирую запись и нажимаю кнопку "Отмена", отменяется только последнее отредактированное поле, я хочу отменить всю строку и все значения восстановить до значений, которые были до редактирования, как я могу это сделать?

3 ответа

Решение

Отменить изменения, сделанные на BindingSources Текущий объект, тип, содержащийся в BindingSource, должен реализовывать интерфейс IEditableObject.

Вы не можете сделать это с помощью BindingSource.CancelEdit. Вместо этого вы можете отсоединить свои связанные элементы управления, такие как TextBox, в режиме редактирования, а затем, если пользователь решит отменить новые введенные значения, снова связать их с bindingsource. в противном случае, если все идет хорошо и пользователь решает сохранить их, замените старые значения в BindingList новыми и сохраните их.

У меня была такая же проблема без какого-либо ответа. Самый простой способ - перезагрузить bindingSource при нажатии кнопки "Отмена".

Другие вопросы по тегам