Почему cmbStream.ValueMember = «id» отображает ноль для всех значений, а cmbStream.DisplayMember = «name» отображает правильное значение

0

Я следую учебнику по вставке данных в поле со списком из базы данных, но похоже, что назначенный ValueMember одинаковый для всех данных, даже несмотря на то, что DisplayMember правильно отображается.

Вот как я добавляю данные в 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 ноль для всех данных?

  • 4
    Ваше свойство get for id имеет неверную переменную возврата. Показывает Return id вместо Return id Return mID
Теги:

1 ответ

2
Лучший ответ

Вы не используете правую переменную для своего получения. Он должен быть 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 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. В любом случае, не используйте эту функцию, это запутывает.

  • 0
    Ага. Также: установите поля DisplayMember и ValueMember перед назначением источника данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню