2011-04-29 37 views
0

這是我之前詢問的另一個問題的後續問題。我以爲我有我需要的一切,但我正在遇到另一個問題。我正在嘗試使用將附加信息附加到lisview項目的自定義listviewitem類。這裏是類:無法在vb.net中投射自定義listviewitem類

Public Class albumListViewItem 
    Inherits ListViewItem 
    Public hash As String 
    Public id As Integer 
    Public provider As String 
    Public providerID As String 
    Public providerURL As String 
    Public providerArtistID As String 
    Public albumName As String 
    Public albumType As String 
    Public numTracks As Integer 
    Public imageURLs() As String 
    Public genres() As String 
    Public styles() As String 
    Public label As String 
    Public year As String 
    Public country As String 
    Public rating As String 
    Public editorsPick As Boolean 
    Public sampleStreamURL As String 
    Public providerReview As String 
End Class 

當我嘗試投了ListViewItem的我的自定義類這樣的:

Dim albumItem As albumListViewItem = CType(lsvHidden.items.item(0), albumListViewItem) 

我碰到下面的錯誤,「無法投類型的對象System.Windows .Forms.ListViewItem'鍵入'AudioMatic.albumListViewItem'。「

我在這裏錯過了什麼?

回答

2

從你剛纔的問題,這一次,我覺得更適合您的問題將是使用常規ListViewItem並存儲在ListViewItem.Tag

附件信息,你可以做

Dim listViewItem As New ListViewItem("SomeText") 
Dim albumInfo As New albumListViewItem() 

albumInfo.albumName = "SomeAlbum" 
... 
listViewItem.Tag = albumInfo 

listView1.Items.Add(listViewItem) 

,然後檢索它像這樣

Dim selectedItem As ListViewItem = listView1.SelectedItems(0).Item 
Dim alubmInfo As albumListViewItem = TryCast(selectedItem.Tag, alubmListViewItem) 

Dim albumName as String = albumInfo.albumName 

看看這個解決方案是否適合你。

+0

你接近。將標籤中的信息存儲起來很好,但爲了檢索它,我不得不使用它。 Dim albumInfo As albumListViewItem = CType(lsvAMalbums.SelectedItems(0),albumListViewItem) – compcentral 2011-04-29 11:50:57

0

如果您逐步瀏覽代碼並觀察變量「lsvHidden.items.item(0)」,您應該能夠首先判斷它是否實際上鍵入了「albumListViewItem」或其他內容。你確定它是第一個被添加到列表中的albumListViewItem?

一些替代方案,你在做什麼; 1.您可以實現一個對象並將其存儲在ListViewItem的標記中。 2.以下文章似乎描述了將列添加到列表視圖以允許在列表視圖本身上存儲額外信息的另一種方法; http://www.codeproject.com/KB/list/ListViewExtendedItem.aspx

我可以欣賞你的情況,因爲我會預期工作。我可以看到這樣做的優點和原因。不確定代碼項目示例是否適合您需要的內容,因此您需要查看該概念。

0

工作代碼:

Public Class albumListViewItem 
    Inherits ListViewItem 
    Public hash As String 
    Public id As Integer 
    Public provider As String 
    Public providerID As String 
    Public providerURL As String 
    Public providerArtistID As String 
    Public albumName As String 
    Public albumType As String 
    Public numTracks As Integer 
    Public imageURLs() As String 
    Public genres() As String 
    Public styles() As String 
    Public label As String 
    Public year As String 
    Public country As String 
    Public rating As String 
    Public editorsPick As Boolean 
    Public sampleStreamURL As String 
    Public providerReview As String 
End Class 

存儲信息使用listviewitem.tag:

Dim listViewItem As New ListViewItem("SomeText") 
Dim albumItem As New albumListViewItem 

albumItem.albumName = "Test Album" 
albumItem.id = "testid" 
albumItem.Text = albumItem.albumName 
albumItem.year = "2011" 
albumItem.numTracks = 10 
'.... 
listViewItem.Tag = albumItem 
'add viewable items to listview 
albumItem.SubItems.Add(albumItem.year) 
albumItem.SubItems.Add(albumItem.numTracks) 
'.... 
ListView1.Items.Add(albumItem) 

讀取先前存儲的信息:

Dim albumInfo As albumListViewItem = CType(ListView1.SelectedItems(0), albumListViewItem) 
Dim id as string = alumInfo.id