簡體   English   中英

綁定兩個組合框並使它們在 VB.NET 中保持同步

[英]Binding two Comboboxes and keeping them synchronized in VB.NET

我正在 Vb.net 中開發銷售點軟件。 我想呈現綁定組合框並保持它們同步的功能。 例如:ComboBox1 顯示“Book_Name”,Combobox2 顯示“Book_Code”。 一旦用戶在 Combobox1 中選擇了“Book_Name”,Combobox2 必須自動顯示相應的“Book_Code”。 任何人都可以向我建議在 VB.NET 中實現此功能的編程代碼嗎?

您只需將兩個控件綁定到同一數據源,例如

myBindingSource.DataSource = myDataTable

With ComboBox1
    .DisplayMember = "BookName"
    .ValueMember = "BookId"
    .DataSource = myBindingSource
End With

With ComboBox2
    .DisplayMember = "BookCode"
    .ValueMember = "BookId"
    .DataSource = myBindingSource
End With

您應該將兩個組合框都綁定到相同的BindingSource實例。 BindingSource將自己的DataSource屬性設置為您的DataTable實例或您自己的類,以獲取Books列表

假設您有一個Book類定義為

Public Class Book

    Public Property ID As Integer
    Public Property Title As String 
    Public Property Code As String
End Class

現在您的組合框可以通過這種方式綁定

' Initialize your data -> (or load from db a DataTable)
Dim bks = New List(Of Book)()
Dim b = New Book() With {.Code = "123", .Title = "ABC", .ID = 1}
bks.Add(b)
b = New Book() With {.Code = "456", .Title = "DEF", .ID = 2}
bks.Add(b)

' Create and initialize the BindingSource instance
Dim bs = New BindingSource()
bs.DataSource = bks

' Set the first combo to display the Title
cbo1.ValueMember = "ID"
cbo1.DisplayMember = "Title"
cbo1.DataSource = bs

' Set the second combo to display the code
cbo2.ValueMember = "ID"
cbo2.DisplayMember = "Code"
cbo2.DataSource = bs

現在,兩個組合框已同步,並且都顯示相同的項目,因為BindingSource在SelectedIndexChange事件中將它們保留在同一記錄上

為了簡單起見,此示例使用自定義類。 如果要使用數據表,則將數據表設置為BindingSource的數據源,並將兩個組合的DisplayMemberValueMember屬性更改為表的列名。

這可能起作用:

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    Select Case ComboBox1.Text
        Case "Book_Name"
            ComboBox2.Text = "Book Code: 1982637"
        Case "Something On ComboBox1"
            ComboBox2.Text = "Something On ComboBox2"
            'Etc.
    End Select
End Sub

如果兩個組合框的項目具有相同的順序,您可以通過綁定選定的索引來保持它們同步。

像這樣:

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
End Sub

Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
        ComboBox1.SelectedIndex = ComboBox2.SelectedIndex
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM