I am using Grammarian's ObjectListView. I changed my old listviews to that, but all I do is to fill in items. But when the app starts up and my mouse is over the listview, it immediately throws an exception for:
System.InvalidCastException was unhandled
Message="Unable to cast object of type 'System.Windows.Forms.ListViewItem' to type 'BrightIdeasSoftware.OLVListItem'."
Source="ObjectListView"
How to fix this?
Also I use Win7 if that's important.
EDIT:
I use a dictionary. It looks like I need to use the SetObjects method instead of adding items.
Ok this is great, but I am just using the dict.Value collection. I don't want to modify the data through listview, only show. So I have only 1 column and list everything there which are strings. Is this possible?
I would appreciate a small sample.
You are right -- you should be using the
SetObjects()
method rather than addingListViewItems
. In an ObjectListView, there should never beListViewItems.
The control keeps track of more information and so needs more than ListViewItems provides.You might want to read the Getting Started page of the website, especially the Unlearn you must section.
ObjectListView does have its own forum, if you want to ask questions there.
I got a similar error when trying to pass a normal ListView in virtual mode to ListViewPrinter in OLV 2.7
It works as expected with an objectlistview. No solution except to use an objectlistview.
Answer for OP:
As far as I understand, you are using a dictionary where the value type is a string.
This shows me a list of the values in the dictionary, in Details mode.
This is not exactly "one line", but if you do set up the column in the designer, then SetObjects() is really that one line to activate it. You just have to remember to call BuildList whenever your dictionary changes.
Answer for @ElektroStudios
Okay, so for some reason you want to use ListViewItem as your "data container". This is not the intended usage for OLV, as pointed out by @Grammarian, but as
ListViewItem
is a class with properties as any other class with properties, this is easily done.This is not a "one-liner", but it most definitely isn't a
write a 1000 lines model class... Just to add 1 string to a ListView
. Note I specified 2 ways of setting up the getters for the columns.This gives me a default looking OLV like this (note the grouping is configurable!)..
In regards to Grammarian's answer, what they do not tell you is this.
They tell you that you need just one line to activate it, but you will find it's a headache and a lot more work then it's worth. I highly suggest you to stick to the normal
ListView
, otherwise you will find yourself writing a 1000 lines model class... Just to add 1 string to aListView
.Just the truth about this
ObjectListView
business before you look too much into it...Go download the example and take a look, I find it easier to just use a normal
ListView
frankly.