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
要获得执行此操作的程序:
(刷新页面再看动画)
我正在尝试将 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
要获得执行此操作的程序:
(刷新页面再看动画)