在一个datagridview中显示父datatable,在另一个datagridview中显示子datatable元素? [英] 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
我想做的是显示所有内容e datagridview1中的KeywordData表。当用户单击任何行(在datagrid上启用了全行选择)时,我希望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 $ c绑定到父
DataTable
$ c>,而子代 BindingSource
通过父代 BindingSource绑定到
DataRelation
code>,而不是绑定到子 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中显示父datatable,在另一个datagridview中显示子datatable元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!