У меня есть приложение, которое имеет Mainform, у которого есть 2 панели с использованием сплиттера. Верхняя панель - это форма, в которой есть привязывающий навигатор, набор данных, источник привязки, таблицы.Обработка обновлений деталей в режиме Master-Detail в Winform C#
Нижняя панель также является формой. Это просто datagridview в принципе. Я передаю источник связывания из верхней формы, в нижнюю форму, когда Mainform загружается.
Нижняя форма берет источник связывания и использует отношения (между двумя таблицами) для собственного источника данных.
Просмотр данных отлично работает.
Когда я обновляю данные в главном, я захватываю его, когда пользователь перемещается с записи. Я использую bindingsource.EndEdit(), DataSet.HasChanges() для проверки, а затем tableadapter.update для записи данных перед переходом на следующую запись.
Это также отлично работает.
Теперь, как мне записывать и записывать данные в форме детали (внизу)? все, что у него есть, является переданным источником.
У меня есть частично работающее решение, где верхняя форма фактически использует второй оператор tableadapter.update для записи дочерней таблицы .. но, похоже, для этой записи требуется 2 записи навигации работать. (в какой момент данные фактически обновляются правильно, хотя)
Какие-либо высокие способы улучшения работы? благодаря R
Кажется, что запись попадает в верхнюю форму, как только я перехожу к следующей записи - если я изменил записи в нижней форме формы после внесения изменений. Но если я останусь на измененной записи и перейду к следующей в верхней форме, то она задерживается. Я запускаю EndEdit на rowvalidation gridview. Может быть, я тоже должен делать это, когда нижняя форма теряет фокус? –
на самом деле .. он также попадает, если я остаюсь на отредактированной записи в нижней детали gridview, но затем нажмите на другое поле в верхней форме, прежде чем перейти к следующей записи в верхней форме. Поэтому проблема возникает только тогда, когда я перехожу из отредактированной нижней записи и сразу же перехожу к следующей записи. Кажется, что это так? –
Кажется, я подтверждаю, что порядок событий - это не то, что я ожидал. Когда пользователь нажимает на нижнюю форму, я пробовал много разных событий, чтобы попытаться вызвать EndEdit на его bindingsource. Тем не менее, каждое событие, похоже, вызывает только ПОСЛЕ события, на которое нажата верхняя форма (т. Е. Перемещение записей), где я проверяю HasChanges и т. Д. События на последнем апплете, которые я пробовал: RowValidating on сетка, Оставьте на нижней форме и CellEndEdit на сетке. Удивительно, но ни один из них не вызван до тех пор, пока ПОСЛЕ события, которое будет нажато из верхнего апплета! –