2010-02-12 57 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