列表框控件项(呃)多个名字?

时间:2010-02-12 03:03:55

标签: vb.net vb6 listbox

好的,所以标题太可怕了。我知道。这就是我想要做的事情:

我有很多来自数据库并添加到列表框的数据。来自数据库的数据是唯一的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)获取名称。

请帮忙!

2 个答案:

答案 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

如果您想同时显示IDName,我建议您添加一个属性作为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")

在这些方法中,你会有一些搜索算法遍历这些项目并找到合适的项目。