如何在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
Run Code Online (Sandbox Code Playgroud)
我需要添加Reader("ID")每个项目的值...
dsc*_*arr 14
我假设你想要在Windows窗体上的ComboBox中添加项目.虽然Klaus在正确的轨道上,但我相信ListItem类是System.Web.UI.WebControls命名空间的成员.因此,您不应该在Windows窗体解决方案中使用它.但是,您可以创建自己的类,以便在其位置使用.创建一个名为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
Run Code Online (Sandbox Code Playgroud)
现在,当您想要将项目添加到ComboBox时,您可以这样做:
myComboBox.Items.Add(New MyListItem("Text to be displayed", "value of the item"))
Run Code Online (Sandbox Code Playgroud)
现在,当您想从ComboBox中检索所选项目的值时,您可以这样做:
Dim oItem As MyListItem = CType(myComboBox.SelectedItem, MyListItem)
MessageBox.Show("The Value of the Item selected is: " & oItem.Value)
Run Code Online (Sandbox Code Playgroud)
其中一个关键是覆盖类中的ToString方法.这是ComboBox获取显示的文本的位置.
Matt在下面的评论中提到了一个很好的观点,即使用泛型来使其更加灵活.所以我想知道那会是什么样子.
这是新的和改进的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
Run Code Online (Sandbox Code Playgroud)
现在,您将如何将Generic项添加到ComboBox中.在这种情况下,整数:
Me.myComboBox.Items.Add(New GenericListItem(Of Integer)("Text to be displayed", 1))
Run Code Online (Sandbox Code Playgroud)
现在检索项目:
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())
Run Code Online (Sandbox Code Playgroud)
请记住,类型Integer可以是任何类型的对象或值类型.如果你希望它是你自己的一个自定义类的对象,那很好.基本上任何事情都与这种方法有关.
Yak*_* R. 11
虽然这个问题是5年,但我遇到了一个很好的解决方案.
使用'DictionaryEntry'对象来配对键和值.
将"DisplayMember"和"ValueMember"属性设置为:
Me.myComboBox.DisplayMember = "Key"
Me.myComboBox.ValueMember = "Value"
Run Code Online (Sandbox Code Playgroud)
要将项添加到ComboBox:
Me.myComboBox.Items.Add(New DictionaryEntry("Text to be displayed", 1))
Run Code Online (Sandbox Code Playgroud)
要检索这样的项目:
MsgBox(Me.myComboBox.SelectedItem.Key & " " & Me.myComboBox.SelectedItem.Value)
Run Code Online (Sandbox Code Playgroud)
如果你想使用SelectedValue,那么你的组合框必须是数据绑定的.
要设置组合框:
ComboBox1.DataSource = GetMailItems()
ComboBox1.DisplayMember = "Name"
ComboBox1.ValueMember = "ID"
Run Code Online (Sandbox Code Playgroud)
要获取数据:
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
Run Code Online (Sandbox Code Playgroud)