mysql - 为什么 cmbStream.ValueMember = "id"对所有值显示零,而 cmbStream.DisplayMember = "name"显示正确的值

标签 mysql vb.net

我正在按照教程将数据从数据库插入到组合框中,但即使 DisplayMember 正确显示,分配的 ValueMember 似乎对于所有数据都是相同的。

这就是我将数据添加到组合框的方式

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。无论如何,不​​要使用该功能,这很困惑。

关于mysql - 为什么 cmbStream.ValueMember = "id"对所有值显示零,而 cmbStream.DisplayMember = "name"显示正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854936/

相关文章:

.net - 如何在 .NET 中创建自己的原始数据类型?

vb.net - 对话框名称

vb.net - 在VB.NET中如何让程序使用所有CPU资源?

mysql - 使用 4.1.1 之前的身份验证协议(protocol)通过 R 访问 MySQL

mysql - 创建外键的问题

mysql - 如何从 MySQL 表中获取正确日期的价格

php - Sprintf将NULL插入mysql

c# - 专注于应用程序

mysql - .Net 应用程序处理 SQL 语句时无法使用系统

php - 如何在页面刷新时保留归档数据