好的,所以标题太可怕了。我知道。这就是我想要做的事情:
我有很多来自数据库并添加到列表框的数据。来自数据库的数据是唯一的ID和名称。
有什么办法可以让这个项目同时包含ID和名字吗?我知道我可以追加它,这不是我想要做的。我需要一种方法来获取ID或获取名称,同时显示它们。
我已经创建了一个类:
Class Item
Property ID as Integer
Property Name as String
Sub New(ID as Integer, Name as String)
Me.ID = ID
Me.Name = Name
End Sub
Overrides Function ToString() as String
Return Name
End Function
End Class
看起来它应该可以解决问题,但是我无法获取ID,而不是名称。简单地说,我希望我能做到这一点:listbox1.selecteditem(id)获取id,或listbox1.selecteditem(name)获取名称。
请帮忙!
答案 0 :(得分:3)
您可以绑定到List(Of Item)
,如下所示:
Dim ItemList = New List(Of Item)
' Fill the list with appropiate values.'
listbox1.DataSource = ItemList
listbox1.DisplayMember = "Name"
listbox1.ValueMember = "ID"
然后listbox1.SelectedValue
拥有ID
,您可以访问以下名称:
DirectCast(listbox1.SelectedItem, Item).Name
如果您想同时显示ID
和Name
,我建议您添加一个属性作为Item
类中的显示值:
Public ReadOnly Property DisplayedValue() as String
Get
Return Me.Name & " (" & Me.ID.ToString & ")"
End Get
End Property
然后在绑定列表时生成
listbox1.DisplayMember = "DisplayedValue"
更新
根据您在下面的评论我会说我的解决方案仍然有效。但是,使用此方法,必须将项添加到列表中,然后将列表绑定到对象。这些项目无法单独添加到列表框中(因为您将数据与演示文稿分开,我不认为这是一个问题)。
要显示包含所选项目的消息框,您只需执行以下操作:
MessageBox.Show(DirectCast(listbox1.SelectedItem, Item).ID.ToString))
答案 1 :(得分:0)
我认为你必须编写一个辅助方法来执行此操作。如果您使用的是VB 3.5或更新版本(VS2008及更新版本的一部分),您可以编写extension method,这样您至少可以获得良好的语法。你可以编写一个这样的文字:
listbox1.SelectByID(123)
listbox1.SelectByName("hello")
在这些方法中,你会有一些搜索算法遍历这些项目并找到合适的项目。