1

C#WinFormsアプリケーションでListViewコントロールを使用しています。リスト内のアイテムはListViewGroupに追加されます(この場合、国ごとにグループ化されます)。期待どおりに機能していないことの1つは、列の並べ替えがおかしいように見えることです。

ListViewのListViewItemSorterプロパティにフックしましたが、国の列が降順(つまり、ZA)で並べ替えられている場合を除いて、すべてが完全に並べ替えられます。リストの並べ替えがどのように行われるかに関係なく、グループは昇順で表示されます。

誰かが私に正しい方向にナッジを与えることができますか?

編集:Vista上のFWIW、.NET3.5。

4

3 に答える 3

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);
于 2009-09-12T02:58:24.243 に答える
0

グループは個別に並べ替える必要があります

        // 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;
        }
于 2012-05-18T07:49:28.913 に答える
-2

ObjectListViewをチェックしてください-操作がはるかに簡単です。

于 2009-07-07T05:29:50.487 に答える