DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コンボボックスとグリッドのrelation

環境/言語:[VB.NET]
分類:[.NET]

VB .netを始めたばかりの初心者です。

datasetに格納されている2つのテーブル(Table1,Table2)に対して、
 1.Table1はComboboxにて表示
2.table2はcomboboxにて選択されたデータに対してグリッドで表示
という動きを実現したいと思っています。

また画面load時のデフォルト表示として、table1の2つ目のデータを表示し、
table2もそれに関する子情報を表示したいと思っています。

そこで、Table1とTable2のrelationを結べば出来るかと思い、以下のような
コーディングをしました。
結果、combobox(table1)のデフォルト表示は出来たのですが、
table2のグリッドはtable1の2つ目ではなく、1つ目のデータが表示されます。
またComboboxにて選択をしてもグリッド(Table2)が変化しません。

(Relationを張ればSelectedIndexChangedを意識しなくてもいいのかと
思っていたのですが、そうではないのでしょうか?
初期値の点も含め、この辺りの理解が誤っている気がしています。)

よろしくお願いします。

(ソース)
-------------------------------------------------------------------
'webサービスにてdtworkにTABLE1,TABLE2を取得
dtwork = webservice.getMST_EMPLO()

'リレーション
dtwork.Relations.Add("RELATION_ADD", dtwork.Tables("TABLE1").Columns("COL1"), dtwork.Tables("TABLE2").Columns("COL1"))

'コンボボックスのbinding
cmbBoxMember.DataBindings.Add("SelectedValue", dtwork, "TABLE1.COL1")
cmbBoxMember.DataSource = dtwork.Tables("TABLE1")
cmbBoxMember.DisplayMember = "COL2"
cmbBoxMember.ValueMember = "COL1"

cmbBoxMember.SelectedIndex = 1  :Comboboxの初期表示指定

'グリッドのbinding
DataGrid.SetDataBinding(dtwork, "TABLE1.RELATION_ADD")
すみません。自己レスです。

ValueMemberプロパティにてselectedValueChangedイベントが発生していること
が分かりました。
そこで、bindingContextを用いてpositionを指定してあげればよいことが分かり、
以下のようにしました。

以上です。

----------------------------------------------------------
<load>
'webサービスにてdtworkにTABLE1,TABLE2を取得
dtwork = webservice.getMST_EMPLO()

'リレーション
dtwork.Relations.Add("RELATION_ADD", dtwork.Tables("TABLE1").Columns("COL1"), dtwork.Tables("TABLE2").Columns("COL1"))


'コンボボックスのbinding
cmbBoxMember.DataBindings.Add("SelectedValue", dtwork, "TABLE1.COL1")
cmbBoxMember.DataSource = dtwork.Tables("TABLE1")
cmbBoxMember.DisplayMember = "COL2"
cmbBoxMember.ValueMember = "COL1"

'グリッドのbinding
DataGrid.SetDataBinding(dtwork, "TABLE1.RELATION_ADD")

'初期値の設定
Me.BindingContext(dtwork, "TABLE1").Position() = 1

---------------------------------------------------------------
Private Sub cmbBoxMember_SelectedIndexChanged()
Dim i As Integer

i = cmbBoxMember.SelectedIndex

Me.BindingContext(dsWork, "TABLE1").CancelCurrentEdit()
Me.BindingContext(dsWork, "TABLE1").Position() = i
End Sub
---------------------------------------------------------------
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板