|
I'm new to C#. I have a program that populates a listview in the Load method. How to I simulate a mouse click on a column header to get the view sorted (so the sort order image is displayed in the column header).
Thanks in advance,
Hal
|
|
|
|
|
You don't have to "simulate" a mouse click on the column header, you just have to call Sort() with the column number and the sort order.
If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell
|
|
|
|
|
Thank you for the reply. When I try Sort(0, SortOrder.Ascending); the compiler tells me that the name Sort does not exist in the class or namespace. Trying ListViewSortManager.Sort(0, SortOrder.Ascending); results in the following error:
An object reference is required for the nonstatic field, method, or property 'EV.Windows.Forms.ListViewSortManager.Sort(int, System.Windows.Forms.SortOrder)'
Regards,
Hal
|
|
|
|
|
Are you calling Sort() on an instance of ListViewSortManager()?
i.e.
<code>
m_sortMgr = new ListViewSortManager(m_list, new Type[] {
typeof(ListViewTextSort),
typeof(ListViewTextCaseInsensitiveSort),
typeof(ListViewInt32Sort),
typeof(ListViewDoubleSort),
typeof(ListViewDateSort)
});
m_sortMgr.Sort(0, SortOrder.Ascending);
</code>
<hr><small><i>If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell</i></small>
|
|
|
|
|
Thank you. I did not have m_sortMgr. on the Sort statement. It is working fine now.
Regards,
Hal
|
|
|
|
|
Just glad to help.
If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell
|
|
|
|
|
Hi,
quite a newbie in C#....
In my procjet i have to use 3 listviews with different number of columns.
May i use only one ListviewSortMAnager.cs or i have to add one for each listview?
Thanks.
|
|
|
|
|
A ListViewManager only handles one list at the time; so you need 3 ListViewManagers, one for each listview.
If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell
|
|
|
|
|
Hi,
I've got a problem with sorting on an integer column. It seems to sort it like text. I want to show some numbers from High to Low, but I get this:
999
998
997
996
1003
1002
1001
1000
Any ideas what I'm doing wrong?
Thanks
/goat
|
|
|
|
|
Are you using a ListViewIntegerSort for that particular column?
If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell
|
|
|
|
|
I was using a ListViewInt32Sort.
There doesn't appear to be a type ListViewIntegerSort.
Perhaps I'm not using it correctly? I'm using it in VB by the way, with
this code to initialize:
oListViewSorter = New ListViewSortManager(lvQuotes, _
New Type() {GetType(EV.Windows.Forms.ListViewInt32Sort), _
GetType(EV.Windows.Forms.ListViewTextCaseInsensitiveSort), _
GetType(EV.Windows.Forms.ListViewTextCaseInsensitiveSort), _
GetType(EV.Windows.Forms.ListViewDateSort), _
GetType(EV.Windows.Forms.ListViewTextCaseInsensitiveSort)})
/goat
|
|
|
|
|
just bumping this issue.
thanks,
/goat
|
|
|
|
|
Thanks for the code.
I have converted the ListViewSortManager control C# code to VB.NET and I was testing functionality to make sure it matched your sample. One thing I needed to add immediately was to 'listview.items.clear', reload the listview with different search results and restore the sorting. When a large number of results returned the sorting needed to be turned off or the item loading would take to long. So I did:
-----------------------------
m_sortMgr = Nothing
ListView.ListViewItemSorter = Nothing
LoadListViewItems()
m_sortMgr = New ListViewSortManager(Me.lvItems, New Type() { _
GetType(ListViewTextSort), _
GetType(ListViewTextSort), _
GetType(ListViewTextSort), _
GetType(ListViewTextSort), _
GetType(ListViewTextSort), _
GetType(ListViewTextSort) _
})
m_sortMgr.Sort(sort_column, sort_order)
------------------------------
And it works great in all columns - except the LAST column. I did some more testing and I noticed the same problem in your code. When clicking on the column header of the last column, then the previous column, then back to the last column I noticed the sort direction and sort image flip as well as sorted column change. On all the other columns the sort direction would not change when column changed. It came to my attention on one of my lists where the last two columns where dates and integers. An error would occur trying to evaluate the order of the integers column in the DateTime.Parse sorter!
Have you noticed this problem? Could you possibly suggest a fix or provide some clues?
Gerry
________________________________
Gerry Kichok
Software Developer
Crazy Rides - Mississauga, Ontario, Canada
E-mail: gkichok@crazyrides.com
Website: http://www.crazyrides.com
|
|
|
|
|
Eddie, great code! I'm using some ideas you used in your code but I'm having a strange problem. I do set the header control's ImageList and the "arrows" show up but they are actually the first two images in the ImageList for the ListView .
I've combed the PSDK with which I've used for years and neither docs nor experience explain this. Even if the poorly wrapped SysListView32 common control did set it's ImageList for both the view and headers, setting the header's ImageList after the control is created should re-set the ImageList to what I specify...but it isn't.
Any ideas why this might be happening?
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Go figure - I spend a couple hours last night on this and right after I posted the previous message, a thought hit me. I checked the messages for setting the ImageList for a ListView and the header control and they're the same. I know that a lot of controls pass their messages down to their children, so the the same ImageList was being set on the header control as well. If I set the ImageList for the ListView first, then the header control, all is well.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
I have a weird problem. I have a listview that uses icons. So I have the listview small and large icons lists set. Now it appears that the ShowHeaderIcon's are no longer the arrows, but the icons from my image lists.
Is there an easy work around for this?
Thanks
KW
|
|
|
|
|
I haven't seen this happen. However, if you set the imagelist of the list's header control to your imagelist this is the behavior that you'll observe.
Do you have a small sample app that replicates this behavior?
If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell
|
|
|
|
|
That is exactly what I am doing. I am using my own image lists. I several listviews within the software that pull from the same 16x16 and 32x32 image lists. As a temporary work around I just found some up and down arrow icons and added them as the first two images in my image lists.
I wasnt sure is there was a way to modify your code so the arrows you are creating internally are not using listview's image list property for storage.
Thanks,
KW
|
|
|
|
|
Anonymous wrote:
That is exactly what I am doing. I am using my own image lists
This I know, what I said was "if you set the imagelist of the list's header control to your imagelist". What I don't know is if the list control resets the image list of the header control whenever it's image list is changed. (Which seems to be the problem by the way)
If Java had true garbage collection, most programs would delete themselves upon execution - Robert Sewell
|
|
|
|
|
No I only specify the small and large lists. Sorry I miss-understood you.
|
|
|
|
|
I have a similar problem, I add icons to the listview (dynamicly using this code http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/SysImageList/article.asp ), however using this technique my sort icons get replaced by those in the ImageList of the ListView. At this point I don't know if it's an error on the library,your control or my code.
|
|
|
|
|
The work around I came up with for this problem was to find my own "up" and "down" arrow icons (or gif's with transparent background) and add them as the first two images in you image list(s).
Hope this helps,
kWa
|
|
|
|
|
As stated above, I'm using the http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/SysImageList/article.asp library to create dinamicaly icons for the list. This library fools the control in thinking it has a Imagelist but i don't know if it really exist since (if I understand it correctly, I'm not into unmanaged code) it seems to work with handles which are not icons...
How does this blend with your methods that create the up-down arrows?
Could the up-down arrow methods be extracted from your code? If so how?
Does someone think it's possible to adapt the library from above so it would know to create those arrows in the right posision? The strangest thing is that for me the effect is to show the shared-folder-on-network and shortcut icon's which are not supposed to be generated by the library (or maybe it gives those icons for 0 and 1 as indexers (can one say that for unmanaged c++)?
|
|
|
|
|
I found if I add the following method to the ListViewSortManager class and call it any time I update the imagelists, it works fine:
public void SetHeaderImageList()
{
SetHeaderImageList(this.m_list, this.m_imgList);
}
It's a real shame that the standard ListView doesn't have events for changing imagelists otherwise you could register for it like the column click and handle it automatically.
|
|
|
|
|
You must place creating ListViewSortManager on form_load event, not in form constructor. That helps me.
|
|
|
|