VB.NET 从 SQL 服务器同步组合框和标签

VB.NET synchronized Combobox and label from SQL Server

我正在尝试将 SQL 服务器 table 的读取与 2 列(nom_unité 和 cout_unité)同步。

第一列 (nom_unité) 将填充到组合框中,我希望第二列 (cout_unité) 与第一个组合框同步到标签中(意思是,当我更改了组合框值,标签也应参考 table).

更改

我可以用 2 个组合框来做到这一点:

    Dim connection As New SqlConnection("Data Source=xxx")

    Dim dt As New DataTable
    Dim sqlquery As String

    connection.Open()

    sqlquery = "select * from liste_unités"

    Dim SQL As New SqlDataAdapter(sqlquery, connection)
    SQL.Fill(dt)

    Dim cmd As New SqlCommand(sqlquery, connection)

    ComboBoxC1L1.DataSource = dt
    ComboBoxC1L1.DisplayMember = "nom_unité"

    ComboBox1.DataSource = dt
    ComboBox1.DisplayMember = "cout_unité"

但我不知道如何使用标签(而不是 ComboBox1)来实现。

我相信我可以通过类似的方式实现它:

Dim sqlcmd As New SqlCommand("select * from liste_unités", connection)
Dim myreader As SqlDataReader
        
myreader = sqlcmd.ExecuteReader()
myreader.Read()

If myreader.HasRows Then
   Label1.Text = myreader.Item("cout_unité").ToString
End If

但这只是读取第一行,在更改第一个组合框选定值时不会更改标签值。

如何做最简单有效?

谢谢:)

由于您已将组合框的数据源分配给包含所需信息的数据表,因此当组合框的值发生变化时,您可以获取该信息。

我开始了一个新的 Windows Forms 项目并在 Form1 上放置了一个组合框(名为“cbNomUnité”)和一个标签(名为“lblCoutUnité”)并使用了以下代码:

Imports System.Data.SqlClient

Public Class Form1

    Dim connStr As String = "Server=.\SQLEXPRESS;Database=Testing;Trusted_Connection=true;"

    Sub PopulateCB()
        Dim sql = "SELECT nom_unité, cout_unité FROM liste_unités"
        Dim dt As New DataTable

        Using conn As New SqlConnection(connStr),
                da As New SqlDataAdapter(sql, conn)
            da.Fill(dt)
        End Using

        cbNomUnité.DataSource = dt
        cbNomUnité.DisplayMember = "nom_unité"

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbNomUnité.SelectedIndexChanged
        Dim cb = DirectCast(sender, ComboBox)

        If cb.SelectedIndex >= 0 Then
            Dim val = DirectCast(cb.SelectedItem, DataRowView).Row.Field(Of String)("cout_unité")
            lblCoutUnité.Text = val

        End If

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        PopulateCB()

    End Sub

End Class

要获得执行此操作的程序:

(刷新页面再看动画)