как добавить значение в элемент 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")