mysql - 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"
解决方案
对于 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()
推荐阅读
- windows - 如何在不注销并重新登录的情况下在 Windows 上启动自动运行应用程序?
- python - 如何找到相同字典值的总数?
- docker - 在 docker 容器中运行 aws-cdk 会破坏 lambda 捆绑。无论如何,我如何使用 nodejs lambda 捆绑?
- html - CSS Flexbox 以 % 宽度包裹项目
- javascript - 一些人可以帮助我使用 Angularjs 使用 Syncfusion ej-angular 在形状中添加 HTML 元素
- nginx - 强制在 NGINX 中进行块传输以获取代理响应
- facebook - 将机器人与 Facebook 连接
- php - Laravel 在方法启动后有条件地添加全局范围
- android - 在 Jetpack Compose 中以编程方式获取和设置元素的位置
- igor - 如何在 Igor64 的过程中将波放入函数中