在一个datagridview中显示父数据表并在另一个中显示子数据表元素? [英] Showing parent datatable in one datagridview and show child datatable elements in another?
问题描述
您好,我创建了一个数据集和两个数据表.URLData 表通过关键字列作为 KeywordData 表的父级.
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
我想做的是显示 datagridview1 中 KeywordData 表中的所有内容.当用户单击任何行(在数据网格上启用全行选择)时,我希望 datagridview2 显示该关键字的所有子行.每当用户切换 datagridview1 中的行时,它都会切换到 datagridview2 中的正确子行.这可能吗?
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?
推荐答案
诀窍在于绑定.点击这里获取完整的解决方案,包括创建DataSet
:
The trick is in the binding. Click here for the full solution, which includes creating the DataSet
:
这是重要的部分,考虑到您已经有一个 DataSet
包含两个 DataTables
和一个 DataRelation
:
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
在这种情况下,data
是 DataSet
.请注意,父 BindingSource
通过 DataSet
绑定到父 DataTable
而子 BindingSource
绑定到DataRelation
通过父 BindingSource
,而不是绑定到子 DataTable
.
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
.
还请注意,我的原始示例绑定到 ComboBox
控件,但正如我在该线程中所说,无论控件的类型如何,原理都是相同的.我已经编辑了上面的代码,改为使用 DataGridView
控件.
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.
这篇关于在一个datagridview中显示父数据表并在另一个中显示子数据表元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!