2

是否可以在运行时按字母顺序对 Windows 窗体 ListView 的所有 ListViewGroups 进行排序?

还是在添加组时必须手动实现排序(使用 ListViewGroupCollection 的“Insert”方法)?如果是这种情况,有人可以告诉我如何做到这一点吗?

4

1 回答 1

2

在 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 资源管理器之间的混合......

所以我会推荐你​​更好的 ListView 组件,它支持开箱即用的排序组:

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

...

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

此外,这些组的外观和行为就像在 Windows 资源管理器中一样,是可折叠的,即使您对它们进行排序也不会发生闪烁。

于 2012-10-12T11:01:01.880 回答