首页 > 解决方案 > vb.net 将数据源设置为组合框

问题描述

我想在我运行时为我的组合框设置一个数据源没有错误,但它在组合框中一直显示零

Dim cnx As New MySqlConnection("datasource=localhost;database=bdgeststock;userid=root;password=")
        Dim cmd As MySqlCommand = cnx.CreateCommand
        Dim da As MySqlDataAdapter
        Dim ds As New DataSet
        If ConnectionState.Open Then
            cnx.Close()
        End If
        cnx.Open()
        cmd.CommandText = "SELECT idf,(prenom + ' ' + nom) AS NAME FROM fournisseur "
        da = New MySqlDataAdapter(cmd)
        cnx.Close()
        da.Fill(ds)
        da.Dispose()
        ComboBox1.DataSource = ds.Tables(0)
        ComboBox1.ValueMember = "idf"
        ComboBox1.DisplayMember = "NAME"

标签: mysql.netdatabasevb.netdatasource

解决方案


对于 ComboBox 数据源,您可能不需要繁重的 Data Set 或 DataTable - 普通对象的集合就可以完成这项工作。

另一种方法是将表示逻辑移动到 vb.net 代码,让 sql server 只做持久性逻辑。

Public Class Fournisseur
    Public ReadOnly Property Id As Integer
    Public ReadOnly Property Name As String  

    Public Sub New(id As Integer, prenom As String, nom As String)
        Id = id
        Name = $"{pronom} {nom}".Trim()
    End Sub
End Class

您可以创建专用函数来加载数据

Private Function LoadItems() As List(Of Fournisseur)
    Dim query = "SELECT idf, prenom, nom FROM fournisseur"

    Using connection As New MySqlConnection(connectionString)
        Using command As New MySqlCommand(query, connection)
            connection.Open()
            Dim items = new List(Of Fournisseur)()

            Using reader AS MySqlDataReader = command.ExecuteReader()
                While reader.Read()
                    Dim item As New Fournisseur(
                        reader.GetInt32(0),
                        reader.GetString(1),
                        reader.GetString(2)
                    )

                    items.Add(item)
                End While
            End Using

            Return items
        End Using
    End Using
End Function

然后使用看起来很简单

ComboBox1.ValueMember = "Id"
ComboBox1.DisplayMember = "Name"
ComboBox1.DataSource = LoadItems()

推荐阅读