【问题标题】:ListViewGroup not sorting correctlyListViewGroup 没有正确排序
【发布时间】:2009-07-07 05:18:51
【问题描述】:

我在 C# WinForms 应用程序中使用 ListView 控件。列表中的项目被添加到 ListViewGroup(在本例中,按国家/地区分组)。没有按预期工作的一件事是列排序似乎很奇怪。

我已经连接到 ListView 的 ListViewItemSorter 属性,并且除了国家/地区列按降序(即 Z-A)排序时,所有内容都可以完美排序。无论列表排序如何发生,组都按升序显示。

任何人都可以在正确的方向上轻推我吗?

编辑:FWIW,Vista 上的 .NET 3.5。

【问题讨论】:

    标签: c# .net winforms listview grouping


    【解决方案1】:

    在您的 ColumnClick 事件中尝试一下:

        // Determine whether the column is the same as the last column clicked.
        if (e.Column != sortColumn)
        {
            // Set the sort column to the new column.
            sortColumn = e.Column;
            // Set the sort order to ascending by default.
            listView1.Sorting = SortOrder.Ascending;
        }
        else
        {
            // Determine what the last sort order was and change it.
            if (listView1.Sorting == SortOrder.Ascending)
                listView1.Sorting = SortOrder.Descending;
            else
                listView1.Sorting = SortOrder.Ascending;
        }
    
        // Call the sort method to manually sort.
        listView1.Sort();
        // Set the ListViewItemSorter property to a new ListViewItemComparer
        // object.
        this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column,
                                                          listView1.Sorting);
    

    【讨论】:

      【解决方案2】:

      组应该单独排序

              // save groups
              ListViewGroup[] oGroups = new ListViewGroup[list.Groups.Count];
              list.Groups.CopyTo(oGroups, 0);
              list.Groups.Clear();
      
              // restore groups
              switch (groupSortOrder)
              {
                  case SortOrder.Ascending:
                      list.Groups.AddRange(oGroups.OrderBy(x => x.Name).ToArray());
                      break;
                  case SortOrder.Descending:
                      list.Groups.AddRange(oGroups.OrderByDescending(x => x.Name).ToArray());
                      break;
                  default:
                      list.Groups.AddRange(oGroups);
                      break;
              }
      

      【讨论】:

        【解决方案3】:

        查看ObjectListView——使用起来更容易。

        【讨论】:

        • 我同意;但是,这应该是一个评论。
        猜你喜欢
        • 2020-04-26
        • 2014-09-07
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多