Also, for clarification: assuming I can get this working, what would the Undo button do to the child records? Would it undo all changes if I had changed multiple child record values in the grid or just the last row changed? I'm hoping the former...
It is the former, by default. However, you will need to change the IncludeInFormUndo property on the form to AllBusinessObjects. By default, it's only PrimaryBusinessObject, which means that a call to Undo() on the form will only undo the changes to the primary business object.
As for the state of the buttons, there is a new event on the business objects, introduced in 1.6.1, called IsDirtyChanged. You'll want to handle that event and set the editing state of the business object. The editing state does not get changed internally unless you manually call the Add() or Edit() methods. So, something like this will change the state of the toolbar buttons:
Private Sub bo_IsDirtyChanged(ByVal sender As Object, ByVal e As EventArgs) Handles bo.IsDirtyChanged
If bo.IsDirty Then
bo.SetEditingState(BusinessEditingState.Editing)
Else
bo.SetEditingState(BusinessEditingState.Idle)
End If
End Sub