mysql - 为什么 cmbStream.ValueMember = "id" 为所有值显示零而 cmbStream.DisplayMember = "name" 显示正确的值
问题描述
我正在按照教程将数据从数据库插入到组合框中,但即使 DisplayMember 正确显示,分配的 ValueMember 似乎对于所有数据都是相同的。
这就是我将数据添加到 ComboBox 的方式
Private Sub cmbStream_VisibleChanged(sender As Object, e As EventArgs) Handles cmbStream.VisibleChanged
If cmbStream.Visible = True Then
cmbStream.DataSource = GetStreamItems()
cmbStream.DisplayMember = "name"
cmbStream.ValueMember = "id"
End If
End Sub
得到这样的数据后
Function GetStreamItems() As List(Of StreamItem)
Dim streamItems = New List(Of StreamItem)
Dim reader As MySqlDataReader
MysqlConn = New MySqlConnection
MysqlConn.ConnectionString = "server='" & My.Settings.MServer & "';user='" & My.Settings.MDbUser & "';password='" & My.Settings.MDbPass & "';database='" & My.Settings.MDb & "'"
Dim sql As String = "SELECT id, name FROM tbl_streams"
Dim Command As MySqlCommand
MysqlConn.Open()
Command = New MySqlCommand(sql, MysqlConn)
Command.CommandTimeout = 30
reader = Command.ExecuteReader()
If reader.HasRows = True Then
While reader.Read()
streamItems.Add(New StreamItem(reader("id"), reader("name")))
End While
End If
Return streamItems
End Function
这是 StreamItem 类
Public Class StreamItem
Public Sub New(ByVal id As Integer, ByVal name As String)
mID = id
mName = name
End Sub
Private mID As Integer
Public Property id() As Integer
Get
Return id
End Get
Set(ByVal value As Integer)
mID = value
End Set
End Property
Private mName As String
Public Property name() As String
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property
End Class
我在代码中做错了什么以使所有数据的 ValueMember 为零?
解决方案
您没有使用正确的变量来获取。它应该是 mID,而不是 id。
Public Property id() As Integer
Get
Return mID
End Get
Set(ByVal value As Integer)
mID = value
End Set
End Property
在 VB.NET 中,函数/属性的名称也用作返回值的某种变量。这与执行 Return 123 相同
Function SomeFunc() As Integer
SomeFunc = 123
End Function
或者在你的情况下
Public Property id() As Integer
Get
id = mID
End Get
Set(ByVal value As Integer)
mID = value
End Set
End Property
由于你没有设置id,所以默认值为0。反正不要用那个特性,很混乱。
推荐阅读
- visual-studio-code - 如何在 VSC 中获得干净的终端
- node.js - 我在 docker 中创建了 nodered 应用程序,我尝试重建 docker,因为我需要使用其他 cli 工具。例如:aws cli
- javascript - TronWeb UnhandledPromiseRejectionWarning:TypeError:e.forEach 不是函数
- google-apps-script - 如何在多列条件下从谷歌表发送 gmail 通知?
- php - 如何在使用 eloquent 时排除某些列 拉拉维尔
- javascript - 表单转发器中的 Vue.js 表单转发器
- string - 字符串中的逗号(千位分隔符)
- python - Kivy (Android):ScrollView.scroll_to() 不显示键盘隐藏的小部件
- javascript - 如何使用 Levenshtein Distance 验证 javascript 中的句子?
- python - 如何通过简单的自定义函数使用 pandas rolling apply?