Using relations to databind two listboxes in a Windows Forms (Win Forms) application

I wanted to use databinding to link 2 list boxes together. I had two tables like this: ItemTypes
TypeID TypeName
1 SomeType
2 Another Type
Items
ItemID TypeID ItemName SomeDetail ItemCost
1 2 Some Product yada 1.22
2 2 Similar Product yada yada 1.99
3 1 Different Product yada 2.22
Now, I ran in to trouble trying to use schema designer in Visual Studio to create my XML schema and relationships for this data. The relationships didn't carry over.

Let's assume these two tables are in your dataset. (dsItems) You need to make sure there is a relationship.
Dim colParent As DataColumn
Dim colChild As DataColumn
colParent = dsItems.Tables("ItemTypes").Columns("TypeID")
colChild = dsItems.Tables("Items").Columns("TypeID")
Dim relTypeItem As New DataRelation("ItemTypes_Items", colParent, colChild)
dsItems.Relations.Add(relTypeItem)

Then bind your first listbox like this:
Me.lbTypes.DisplayMember = "ItemTypes.TypeName"
Me.lbTypes.ValueMember = "ItemTypes.TypeID"
Me.lbTypes.DataSource = dsItems

And your second like this:
Me.lbItems.DisplayMember = "ItemTypes.ItemTypes_Items.ItemName"
Me.lbItems.ValueMember = "ItemTypes.ItemTypes_Items.ItemID"
Me.lbItems.DataSource = dsItems

Then you can even bind to some textboxes for the details, like this:
Me.tbSomeDetail.DataBindings.Clear() ' Make sure you don't have multiple relations, that will error.
Me.tbSomeDetail.DataBindings.Add(New Binding("Text", dsItems, "ItemTypes.ItemTypes_Items.SomeDetail"))
Me.tbItemCost.DataBindings.Clear()
Me.tbItemCost.DataBindings.Add(New Binding("Text", dsItems, "ItemTypes.ItemTypes_Items.ItemCost"))

Back to Tips and Tutorials