是否可以在运行时按字母顺序对 Windows 窗体 ListView 的所有 ListViewGroups 进行排序?
还是在添加组时必须手动实现排序(使用 ListViewGroupCollection 的“Insert”方法)?如果是这种情况,有人可以告诉我如何做到这一点吗?
是否可以在运行时按字母顺序对 Windows 窗体 ListView 的所有 ListViewGroups 进行排序?
还是在添加组时必须手动实现排序(使用 ListViewGroupCollection 的“Insert”方法)?如果是这种情况,有人可以告诉我如何做到这一点吗?
在 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 资源管理器中一样,是可折叠的,即使您对它们进行排序也不会发生闪烁。