2010-02-12 66 views
4

好吧,标题太可怕了。我知道。这里就是我想要做的事:列表框控件(ugh)多个名称?

我有很多这是一个从数据库中来,并为添加到列表框的数据。来自数据库的数据是唯一的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

我想你必须编写一个辅助方法来做到这一点。如果您使用的是VB 3.5或更新版本(VS2008及更新版本的一部分),则可以编写extension method,这样至少可以获得很好的语法。你可以写一个,使得它看起来像:

listbox1.SelectByID(123) 
listbox1.SelectByName("hello") 

在这些方法中你必须通过的项目去了,找到一种合适一些搜索算法。

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)) 
+0

你太了不起了。谢谢! – 2010-02-12 03:36:42

+0

等待等待!还没有那么多的赞美呢。我将如何为每个单独的项目做到这一点!? /facepalm。 – 2010-02-12 03:58:16

+0

绑定到列表时,列表中的每个项目都被视为相同。您以某种方式绑定到列表,而不是每个项目。或者我误解了你的问题? – Wilhelm 2010-02-12 04:02:06