开发者

Unable to cast custom listviewitem class in vb.net

This is a followup question to another question I asked earlier. I thought I had everything I needed, but I'm running into another issue. I'm trying to use a custom listviewitem class that attaches additional information to a lisview item. Here is the class:

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开发者_Go百科
    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

When I try to cast a listviewitem to my custom class like this:

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

I get the following error, "Unable to cast object of type 'System.Windows.Forms.ListViewItem' to type 'AudioMatic.albumListViewItem'."

What am I missing here?


From your previous question and this one, I think a better fit for your problem would be to use a regular ListViewItem and store the accessory information in ListViewItem.Tag

You can do

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

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

listView1.Items.Add(listViewItem)

and then retrieve it like this

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

Dim albumName as String = albumInfo.albumName

see if this solution will work for you.


If you step through the code and watch the variable "lsvHidden.items.item(0)" you should be able to first tell if it is in fact of type "albumListViewItem" or something else. Are you sure it was albumListViewItem that was added to the list in the first place?

Some alternatives to what you are doing; 1. You can implement an object and store it in the tag of the ListViewItem. 2. The following article seems to describe another approach of adding Columns to the listview to allow storing extra information on the listview itself; http://www.codeproject.com/KB/list/ListViewExtendedItem.aspx

I can appreciate your situation as I would have expected that to work. And I can see advantages and reasons for doing it that way as well. Not sure if the code project sample is adaptable to what you need, so you'll need to review the concept.


The working code:

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

Storing information using 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)

Reading the information that was previously stored:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜