Reputation: 2237
Hi I have created a dataset and two datatables. The URLData table is parented to the KeywordData table via the keyword column.
'Create the primary object to hold both data tables
Dim AllKeyWordInfo As DataSet = New DataSet("AllKeywordInfo")
'Create a Datatable For keyword Data. Data Tables are stores In the Dataset
Dim KeywordData As DataTable = AllKeyWordInfo.Tables.Add("Keywords")
'Create a Datatable For URL Data.
Dim URLData As DataTable = AllKeyWordInfo.Tables.Add("URLMetrics")
'Add Columns to our Keyword datatable
KeywordData.Columns.Add("Keyword")
KeywordData.Columns.Add("SearchCount")
'Add Columns to URLDATA
URLData.Columns.Add("Keyword")
URLData.Columns.Add("URL")
URLData.Columns.Add("DA")
URLData.Columns.Add("PA")
'Creat a parent child relationship
AllKeyWordInfo.Relations.Add("ALLDATA", AllKeyWordInfo.Tables("Keywords").Columns("Keyword"), AllKeyWordInfo.Tables("URLMetrics").Columns("Keyword"))
'parent
KeywordData.Rows.Add("TESTEST", "1123829")
'children
URLData.Rows.Add("TESTEST", "288789")
URLData.Rows.Add("TESTEST", "asdsdsdd")
DataGridView1.DataSource = KeywordData
DataGridView2.DataSource = URLData
What I would like to do is show everything from the KeywordData table in datagridview1. When a user click on any row (full row select enabled on the datagrid) I would like datagridview2 to show all the child rows for that keyword. Any time the user switches rows in datagridview1 it switches to the proper child rows in datagridview2. Is this possible?
Upvotes: 2
Views: 4458
Reputation: 54417
The trick is in the binding. Click here for the full solution, which includes creating the DataSet
:
Here's the important part, considering that you already have a DataSet
containing two DataTables
and a DataRelation
:
'Bind the parent source to the parent table.
Me.BindingSource1.DataSource = data
Me.BindingSource1.DataMember = "Parent" 'This is the name of the parent DataTable.
'Bind the child source to the relationship.
Me.BindingSource2.DataSource = Me.BindingSource1
Me.BindingSource2.DataMember = "ParentChild" 'This is the name of the DataRelation.
'Bind the parent control to the parent source.
Me.DataGridView1.DataSource = Me.BindingSource1
'Bind the child control to the child source.
Me.DataGridView2.DataSource = Me.BindingSource2
In this case, data
is the DataSet
. Note that the parent BindingSource
is bound to the parent DataTable
via the DataSet
while the child BindingSource
is bound to the DataRelation
via the parent BindingSource
, rather than being bound to the child DataTable
.
Also note that my original example binds to ComboBox
controls but, as I say in that thread, the principle is the same regardless of the type of the controls. I've edited the code above to use DataGridView
controls instead.
Upvotes: 4