簡體   English   中英

vb.net 設置數據源到組合框

[英]vb.net setting data source to combobox

我想在我運行時為我的組合框設置一個數據源,但沒有錯誤,但它一直在組合框中顯示零

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"

對於 ComboBox 數據源,您可能不需要繁重的數據集或數據表 - 普通對象的集合就可以完成這項工作。

另一種方法是將表示邏輯移至 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()

我認為問題出在您的 sql 中,而 mysql 正在對 prenom 和 nom 執行某種數字加法並產生 0

嘗試

CONCAT(prenom, ' ', nom) as name

在你的 sql 中。 我更喜歡在大多數 RDBMS 中使用 concat 來連接字符串,因為它更符合它在 NULL 上的行為 - 在 sqlserver 中,在諸如'a' + null'a' + null東西上使用加號的 concat 運算符會導致 NULL 但在 oracle 'a' || null 'a' || nulla - 在兩個 CONCAT 行為中是一致的

這是包含我所有建議的完整代碼:

Dim cnstr = "datasource=localhost;database=bdgeststock;userid=root;password="
Dim cmd = "SELECT idf, CONCAT(prenom, ' ', nom) AS nom FROM fournisseur "
Using da As New MySqlDataAdapter(cmd, cnstr)
    Dim dt As New DataTable
    da.Fill(dt)
    ComboBox1.DataSource = dt
    ComboBox1.ValueMember = "idf"
    ComboBox1.DisplayMember = "nom"
End Using

提示:

  • 您不需要弄亂連接:dataadapter 將為您創建/打開/關閉它
  • 使用數據表而不是數據集
  • 使用 使用
  • 使用 MySqlDataAdapter 的構造函數,它接受一個連接字符串和一個命令文本——在這種情況下更短更接近。 如果我在事務等中手動注冊多個命令,我只使用帶有 DbConnection 的構造函數

暫無
暫無

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

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