2009-07-07 4 views
1

Ich verwende ein ListView-Steuerelement in einer C# WinForms-Anwendung. Elemente in der Liste werden zu einer ListViewGroup hinzugefügt (in diesem Fall eine Gruppierung nach Land). Die eine Sache, die nicht wie erwartet funktioniert, ist, dass die Spaltensortierung seltsam erscheint.ListViewGroup nicht richtig sortiert

ich süchtig habe in das ListViewItemSorter Eigentum der Listview und alle Sorte perfekt, außer wenn das Land Spalt in absteigender Reihenfolge sortiert ist (das heißt, Z-A). Unabhängig davon, wie die Sortierung der Liste erfolgt, werden die Gruppen in aufsteigender Reihenfolge angezeigt.

Kann mir jemand einen Schub in die richtige Richtung geben?

BEARBEITEN: FWIW, .NET 3.5 auf Vista.

Antwort

-2

Check out ObjectListView - es ist viel einfacher zu arbeiten.

+1

Ich bin damit einverstanden sortiert werden; aber das sollte ein Kommentar sein. –

1

Geben Sie diesen einen Versuch in Ihrem Column Event:

// 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); 
0

Gruppen sollten getrennt

 // 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; 
     }