2012-09-22 69 views
1

是否可以在運行時按字母順序排列Windows窗體ListView的所有ListViewGroups?按字母順序排序ListView的ListViewGroups

或者當我添加組(使用ListViewGroupCollection的「插入」方法)時,是否必須手動實現排序?如果是這樣,有人可以給我一個想法如何做到這一點?

回答

1

在的WinForms ListView的,你必須做手工排序:

ListViewGroup[] groups = new ListViewGroup[this.listView1.Groups.Count]; 

this.listView1.Groups.CopyTo(groups, 0); 

Array.Sort(groups, new GroupComparer()); 

this.listView1.BeginUpdate(); 
this.listView1.Groups.Clear(); 
this.listView1.Groups.AddRange(groups); 
this.listView1.EndUpdate(); 

... 

class GroupComparer : IComparer 
{ 
    public int Compare(object objA, object objB) 
    { 
     return ((ListViewGroup)objA).Header.CompareTo(((ListViewGroup)objB).Header); 
    } 
} 

組在.NET中的ListView是相當討厭的 - 它們的外觀和行爲像老的Win32 ListView和Windows資源管理器...

之間的混合

因此,我建議你Better ListView component支持分類組開箱:

this.betterListView1.Groups.Sort(new GroupComparer()); 

... 

class GroupComparer : IComparer<BetterListViewGroup> 
{ 
    public int Compare(BetterListViewGroup groupA, BetterListViewGroup groupB) 
    { 
     return groupA.Header.CompareTo(groupB.Header); 
    } 
} 

此外,該組的外觀和行爲只是就像在Windows資源管理器中一樣,它們是可摺疊的,即使對它們進行排序也不會發生閃爍。

+0

謝謝!我的ListView組件中缺少組排序,我已經實現了可摺疊組和雙緩衝/ uxstyles。 –