Any ideas on how I can solve this issue without filling the business object on the child form?
This has to do with the instantiation order. The reason you are seeing this behavior is because at the time the grid is being populated the BOs have not yet been translated. If you wait until further down the execution string, for example the OnLoad of the form, you will see the populated BOs. For example, if you put a breakpoint in the constructor of the form, you will see that the BOs on the child form do not have any records in it. However, if you put the breakpoint in the Load after the Base call, you will see that it will have records.
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
'-- Check for records here
End Sub
So you may need to "refresh" the grid or not bind the BBS to the grid until after the load to get the behavior you are expecting.