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