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 при нажатии кнопки "Отмена".