在一个datagridview中显示父datatable,在另一个datagridview中显示子datatable元素? [英] Showing parent datatable in one datagridview and show child datatable elements in another?

查看:94
本文介绍了在一个datagridview中显示父datatable,在另一个datagridview中显示子datatable元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个数据集和两个数据表。 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 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆