I just expalined how to do this earlier today with two DataGridViews. Check out this thread for an example. Now, because you are displaying your parent records in a ListBox instead of a DataGridView this part:
vb.net Code:
  1. Me.BindingSource1.DataSource = data.Tables("Parent")
  2.  
  3.     Me.DataGridView1.DataSource = Me.BindingSource1
  4.  
  5.     Me.DataGridView2.DataMember = "ParentChild"
  6.     Me.DataGridView2.DataSource = Me.BindingSource1
would become this:
vb.net Code:
  1. Me.BindingSource1.DataSource = data.Tables("Parent")
  2.  
  3.     Me.ListBox1.ValueMember = "ID"
  4.     Me.ListBox1.DisplayMember = "Name"
  5.     Me.ListBox1.DataSource = Me.BindingSource1
  6.  
  7.     Me.DataGridView2.DataMember = "ParentChild"
  8.     Me.DataGridView2.DataSource = Me.BindingSource1
Now, to set up the realtion and the binding using your table and column names:
vb.net Code:
  1. Dim relation As New DataRelation("CategoriesItems", _
  2.                                      parentTable.Columns("CatID"), _
  3.                                      childTable.Columns("CatID"))
  4.  
  5.     data.Relations.Add(relation)
  6.  
  7.     Me.BindingSource1.DataSource = data.Tables("Categories")
  8.  
  9.     Me.ListBox1.ValueMember = "CatID"
  10.     Me.ListBox1.DisplayMember = "CatDesc"
  11.     Me.ListBox1.DataSource = Me.BindingSource1
  12.  
  13.     Me.DataGridView2.DataMember = "CategoriesItems"
  14.     Me.DataGridView2.DataSource = Me.BindingSource1
If you have created a typed DataSet then all of this can be set up in the designer with no code at all. If that's the case then let me know and I'll give you the instructions.