[英]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' || null
是a
- 在兩個 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
提示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.