Combobox sincronizado con VB.NET y etiqueta de SQL Server

Combobox sincronizado con VB.NET y etiqueta de SQL Server

Estoy tratando de sincronizar la lectura de una tabla de SQL Server con 2 columnas (nom_unité y cout_unité).

La primera columna (nom_unité) se completará en un cuadro combinado y quiero que la segunda columna (cout_unité) se sincronice en una etiqueta con el primer cuadro combinado (es decir, cuando cambie el valor del cuadro combinado, la etiqueta también debería cambiar haciendo referencia a a la mesa).

Puedo hacer esto con 2 cuadros combinados:

    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é"

pero no sé cómo hacerlo con una etiqueta (en lugar de ComboBox1).

Creo que puedo lograrlo con algo así:

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

pero esto solo lee la primera fila y no cambia el valor de la etiqueta al cambiar el primer valor seleccionado del cuadro combinado.

¿Cómo hacerlo de la manera más fácil y eficiente?

Gracias :)

Mostrar la mejor respuesta

Hay eventos que se desencadenan cuando se cambia el elemento seleccionado en un cuadro combinado. Debe responder a esos eventos y establecer la etiqueta según sea necesario. Y acaba con la pereza: dale nombres útiles a tus controles.

Bueno, gracias por tu aporte, supongo. Los nombres de los controles son un ejemplo... Y soy consciente del evento del elemento seleccionado de ComboBox, pero lo que no sé es qué código se puso en él. Por eso publiqué aquí...

Como ha asignado la fuente de datos del cuadro combinado a una tabla de datos que contiene la información que necesita, puede obtener esa información cuando cambie el valor del cuadro combinado.

Comencé un nuevo proyecto de Windows Forms y puse un cuadro combinado (llamado "cbNomUnité") y una etiqueta (llamada "lblCoutUnité") en Form1 y usé este código:

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

Para obtener un programa que haga esto:

Programa que muestra un cambio de etiqueta cuando se cambia un elemento del cuadro combinado.

(Actualice la página para volver a ver la animación).

Vaya gracias Andrés. Claro como el cristal ! ¡Muchas gracias señor!

Bueno, lo siento, olvidé decirte que cout_unité son números. Recibí este error: System.InvalidCastException: 'Imposible convertir un objeto 'System.Int32' en 'System.String'.'

Acabo de reemplazar "Of String" por "Of Integer" y funcionó de maravilla. :)

@Coucouyou De nada :)