Here's what I'm trying to do:
On a form, I have a DataGridView (the Master), bound to a BindingSource, bound to a single DataTable inside a DataSet.
There is also a "details" section with individual edit controls (TextBox, DateTimePicker, etc) bound to fields in the current master record. This all works fine.
There are two "child collections" associated with each "master" row. These are rows in additional tables joined to the parent with "Both Relation and Foreign Key Constraint" in the dataset designer.
Each child collection has a DataGridView, bound to a BindingSource, bound to the foreign key relation in the master binding source.
So, the overall form layout is Parent-Grid, Parent-detail, Child1-Grid, Clild2-Grid.
This all works great when viewing/editing records, but when trying to create new records, it's annoyingly close to working, but not quite.
For example, I add a new Master row (by clicking Add on its BindingNavigator). Row appears. I add a row to the first child collection (by clicking Add on its BindingNavigator). Row appears. I add a row to the second child collection. Row appears.
I now edit one of the master fields in the details section and POOF! My new rows in the child collections disappear. Or I click Save to save all the changes and the new child rows disappear. Or I add multiple rows and when I save the last one disappears. By the way - all of this disappearing happens before the DataSet is saved to the database - this is all interaction between DataGridView, BindingSource and so on, all through designer generated code.
Am I just asking too much of Data Binding in Windows Forms, or is there something fundamental that I'm missing when editing parent-child collections?
Here's what I ended up doing.
So, in the end, I actually kept most of the databinding machinery that the designer produced - I "just" stopped using binding to foreign key relations and handled all of the child table filtering myself.
All foreign key update propagation is handled by the designer generated DataSet, so deleting a parent transparently deletes all the linked child rows as well, just as you'd expect.