Ответ на этот вопрос может оказаться следующим: «Не используйте типизированные наборы данных без использования Binding Navigator».
Однако мне любопытно, какое поведение я вижу.
Итак, я создал форму, где каждый элемент управления перетаскивался из проводника источников данных.
Я удалил Binding Navigator, потому что он уродлив и не подходит для данной формы.
Я добавил ListBox и установил источник данных в BindingSource.
Обратите внимание, что ListBox не связан, он просто заполняет себя из BindingSource.
Каким-то волшебством, на которое я не рассчитывал, перемещение по ListBox перемещается по BindingSource, и все остальные элементы управления обновляются соответствующим образом.
Я могу внести изменения в связанные элементы управления и явно вызвать EndEdit в BindingSource, а затем обновить DataSource через адаптер таблицы. Прекрасно работает.
Когда я делаю изменения в связанных элементах управления и щелкаю новую опцию в ListBox, я хочу иметь возможность проверить изменения и предложить сохранить или сбросить их, если они есть.
Вот странная часть, которую я не смог понять.
Независимо от того, к какому событию я присоединяюсь, DataSet.HasChanges не возвращает true, пока второе изменение ListBox не изменится.
Я искал и пробовал десятки предложений, большинство из которых были смешными, но некоторые казались многообещающими.
Не повезло.
Редактировать: важен не второй щелчок, а когда вы возвращаетесь к исходному (отредактированному) элементу.