как добавить значение в элемент combobox

Как добавить значение данных каждого элемента в combobox в Visual Basic 2010?

как раскрывающийся список html.

или все равно нужно добавлять значения к каждому элементу ?

Я добавляю элемент из базы данных MySQL следующим образом:

Command = New MySqlCommand("SELECT * FROM `maillist` WHERE l_id = '" & id & "'", connection)

Command.CommandTimeout = 30
Reader = Command.ExecuteReader()
If Reader.HasRows = True Then
    While Reader.Read()
        ComboBox1.Items.Add(Reader("name"))
    End While
End If

мне нужно добавить Reader("ID") как значение каждого элемента...

6 ответов


Если вы хотите использовать SelectedValue, то ваш combobox должен быть привязан к базе данных.

чтобы настроить combobox:

ComboBox1.DataSource = GetMailItems()
ComboBox1.DisplayMember = "Name"
ComboBox1.ValueMember = "ID"

получить данные:

Function GetMailItems() As List(Of MailItem)

    Dim mailItems = New List(Of MailItem)

    Command = New MySqlCommand("SELECT * FROM `maillist` WHERE l_id = '" & id & "'", connection)
    Command.CommandTimeout = 30
    Reader = Command.ExecuteReader()

    If Reader.HasRows = True Then
        While Reader.Read()
            mailItems.Add(New MailItem(Reader("ID"), Reader("name")))
        End While
    End If

    Return mailItems

End Function

Public Class MailItem

    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 mID
        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

Я предполагаю, что вы хотите добавить элементы в ComboBox в форме Windows. Хотя Клаус на правильном пути, я считаю, что класс ListItem является членом системы.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Пространство имен WebControls. Поэтому вы не должны использовать его в решении Windows forms. Однако вы можете создать свой собственный класс, который вы можете использовать вместо него. Создайте простой класс под названием MyListItem (или любое другое имя), как это:

Public Class MyListItem
    Private mText As String
    Private mValue As String

    Public Sub New(ByVal pText As String, ByVal pValue As String)
        mText = pText
        mValue = pValue
    End Sub

    Public ReadOnly Property Text() As String
        Get
            Return mText
        End Get
    End Property

    Public ReadOnly Property Value() As String
        Get
            Return mValue
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return mText
    End Function
End Class

теперь, когда вы хотите добавить элементы в свой ComboBox вы можете сделать это так:

myComboBox.Items.Add(New MyListItem("Text to be displayed", "value of the item"))

теперь, когда вы хотите получить значение выбранного элемента из выпадающего списка вы можете сделать это так:

Dim oItem As MyListItem = CType(myComboBox.SelectedItem, MyListItem)
MessageBox.Show("The Value of the Item selected is: " & oItem.Value)

один из ключей здесь переопределяет метод ToString в классе. Здесь ComboBox получает отображаемый текст.


Мэтт сделал отличный момент, в своем комментарии ниже, об использовании дженериков, чтобы сделать это еще более гибким. И мне стало интересно, как это будет выглядеть. как.

вот новый и улучшенный GenericListItem класс:

Public Class GenericListItem(Of T)
    Private mText As String
    Private mValue As T

    Public Sub New(ByVal pText As String, ByVal pValue As T)
        mText = pText
        mValue = pValue
    End Sub

    Public ReadOnly Property Text() As String
        Get
            Return mText
        End Get
    End Property

    Public ReadOnly Property Value() As T
        Get
            Return mValue
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return mText
    End Function
End Class

и вот как вы теперь добавите общие элементы в свой ComboBox. В этом случае целое число:

Me.myComboBox.Items.Add(New GenericListItem(Of Integer)("Text to be displayed", 1))

и теперь извлечение элемента:

Dim oItem As GenericListItem(Of Integer) = CType(Me.myComboBox.SelectedItem, GenericListItem(Of Integer))
MessageBox.Show("The value of the Item selected is: " & oItem.Value.ToString())

имейте в виду, что типа Integer может быть любым типом объекта или типа значения. Если вы хотите, чтобы это был объект из одного из ваших собственных классов, это нормально. В принципе, все идет с этим подходом.


хотя этот вопрос 5 лет, я столкнулся с хорошим решением.

используйте объект 'DictionaryEntry' для сопряжения ключей и значений.

задайте для свойств "DisplayMember" и "ValueMember" значение:

   Me.myComboBox.DisplayMember = "Key"
   Me.myComboBox.ValueMember = "Value"

чтобы добавить элементы в ComboBox:

   Me.myComboBox.Items.Add(New DictionaryEntry("Text to be displayed", 1))

для отступления таких элементов:

MsgBox(Me.myComboBox.SelectedItem.Key & " " & Me.myComboBox.SelectedItem.Value)

вместо добавления Reader("Name") добавить новый ListItem. ListItem есть Text и a Value свойство, которое можно задать.


да, в большинстве случаев, вам не нужно создать класс с геттерами и сеттерами. Просто создайте новый словарь и привяжите его к источнику данных. Вот пример в VB, использующий цикл for для установки DisplayMember и ValueMember поля со списком из списка:

        Dim comboSource As New Dictionary(Of String, String)()
        cboMenu.Items.Clear()
        For I = 0 To SomeList.GetUpperBound(0)
            comboSource.Add(SomeList(I).Prop1, SomeList(I).Prop2)
        Next I
        cboMenu.DataSource = New BindingSource(comboSource, Nothing)
        cboMenu.DisplayMember = "Value"
        cboMenu.ValueMember = "Key"

затем вы можете настроить строки представления сетки данных в соответствии со значением или что вам нужно, вызвав метод по щелчку:

Private Sub cboMenu_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboMenu.SelectionChangeCommitted
    SetListGrid(cboManufMenu.SelectedValue)
End Sub

Теперь вы можете использовать метод add

' Visual Basic
CheckedListBox1.Items.Insert(0, "Copenhagen")