2016-07-22 17 views
0

こんにちは私はデータセットと2つのデータセットを作成しました。 URLDataテーブルはキーワード列を介してKeywordDataテーブルを親にしています。親datatableを1つのdatagridviewに表示し、子のdatatable要素を別のdatagridviewに表示しますか?

'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テーブルのすべてを表示することです。ユーザーが任意の行をクリックすると(DataGridでフル行選択が有効になっている)、そのキーワードのすべての子行を表示するようにdatagridview2を設定します。ユーザーがdatagridview1の行を切り替えると、datagridview2の適切な子行に切り替わります。これは可能ですか?

答えて

1

トリックはバインディングにあります。 DataSetの作成が含まれ、完全なソリューションのためのClick here

は、ここでは、すでに2 DataTablesDataRelationを含むDataSetを持っていることを考慮すると、重要な部分です:

この場合
'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 

dataDataSetです。親BindingSourceは、子DataTableにバインドされるのではなく、子BindingSourceが親BindingSourceを介してDataRelationにバインドされている間に、DataSetを介して親DataTableにバインドされることに注意してください。

私の元の例はComboBoxコントロールにバインドされていますが、そのスレッドで言うように、コントロールのタイプに関係なく原則は同じです。上記のコードを編集して、代わりにDataGridViewコントロールを使用しました。

+0

これは完全にありがとうございます! –

関連する問題