1

このコードをロードして、コンボボックス1に入力しました

sql = "select name1,id1 from table1"
da = New Odbc.OdbcDataAdapter(sql, con)
da.Fill(ds, "cbtbl1")
ComboBox1.DataSource = ds.Tables("cbtbl1")
ComboBox1.DisplayMember = ds.Tables("cbtbl1").Columns("name1").Caption

コンボボックス1に関連する2番目のコンボボックス2があります。このコードをコンボボックス1に挿入しましたselectedvaluechanged。これは、関連する ID に基づいて、combobox2 の値に変更されます

sql = "select name2,id2 from table2 where id1=" & ???????
da = New Odbc.OdbcDataAdapter(sql, con)
da.Fill(ds, "cbtbl2")
ComboBox2.DataSource = ds.Tables("cbtbl2")
ComboBox2.DisplayMember = ds.Tables("cbtbl2").Columns("name2").Caption

私のコードには疑問符があります。取得方法がわからないtable1のIDであるはずです:(または何を入れるか

4

1 に答える 1

1

ValueMemberCombobox1 の をデータベースから取得した ID に設定し、SelectedValueプロパティを使用して選択した項目の ID を取得する必要があります。

Combobox1 をデータバインドするときにプロパティを指定しないとうまくいかないと思うValueMemberので、最初に指定することを忘れないでください。

OK、私は現在取り組んでいるデータベースで何かをすばやくまとめました (これは OLEDB ですが、これには問題ありません)。

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

    Dim ds As New DataSet()
    Dim test As New OleDbDataAdapter("SELECT [ID], [名前] FROM [Tレイヤ管理]", DBConnections.PrimaryAccessDBConnection)
    Call test.Fill(ds, "testTable")

    Me.ComboBox1.DataSource = ds.Tables("testTable")
    Me.ComboBox1.ValueMember = "ID"
    Me.ComboBox1.DisplayMember = "名前"

    AddHandler Me.ComboBox1.SelectedValueChanged, AddressOf Something

End Sub

Private Sub Something(sender As Object, e As EventArgs)

    Call MessageBox.Show(String.Format("ID {0}", Me.ComboBox1.SelectedValue))

End Sub

これでIDがうまく表示されます。

アップデート:

それでもうまくいかない場合は、次の方法で選択したアイテムを取得できます。

プライベート サブ サムシング (オブジェクトとしての送信者、EventArgs としての e)

    Dim selectedItem As DataRowView = CType(Me.ComboBox1.SelectedItem, DataRowView)

    Call MessageBox.Show(String.Format("ID {0} Name {1}", New Object() {selectedItem("ID"), selectedItem("名前")}))

End Sub
于 2013-03-15T06:55:35.907 に答える