Die Sortierung einer ListView nach mehreren Spalten in C#
Mit ListView
steuert, können Sie eine Spalte zu Sortieren, und es gibt eine Methode, um sort()
Wann immer Sie wollen.
Ist dies jedoch nur erlaubt einzelne Spalte Sortieren.
Ich bin daran interessiert zu Sortieren, sagen wir, Spalte A zuerst, und dann nach Spalte F, wenn Sie identisch sind.
Ich habe ein paar custom zu vergleichen-Klassen geschrieben online, aber fragte sich, ob stackoverflow zeigen konnte, ein sauberer Weg. Plus, die hier anderen helfen kann und sucht es in Zukunft 🙂
Anregungen oder Beispiele, wie man über diese geschätzt.
- sind Sie bevölkern das listview-Steuerelement über eine Abfrage? vielleicht könnten Sie speichern Sie die Sortierkriterien in einem versteckten Feld und dann einfach bestellen, indem Sie Kriterien in der Abfrage.
- Leider Nein. Den Daten geht in die listview teilweise gefüllt, und dann als mehr info zu den Elementen ist bekannt, das listview aktualisiert wird, erfordert das zurückgreifen, während in der listview wie diese kommen in...
InformationsquelleAutor Mark Mayo | 2009-10-22
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, nach spielen um, die Antwort, die ich kam, war schreiben eine
ListViewItemComparer
- Klasse durch dieIComparer
- Schnittstelle.Ich dann überschrieb die
Compare()
Methode, und könnte nun zurückkehren, -1, 0, oder 1 je nachdem der Vergleich zwischen der ersten primären Spalte, und dann, wenn gleich der sekundären Spalte.Ganz ordentlich am Ende, denke ich.
Wie bei fast allen Aufgaben, ObjectListView (ein open-source-wrapper .NET WinForms-ListView -) macht das Leben mit einer ListView viel einfacher.
ObjectListView hat
SecondarySortColumn
undSecondarySortOrder
Eigenschaften genau das zu tun, was Sie Fragen.Wenn Sie wollen, zu tun, auch Züchter Sortieren, können Sie eine
CustomSorter
. Haben Sie einen Blick auf dieses Rezept@MarkMayo, die ich erstellt hatte, meine eigenen sorter-Klasse
ListViewItemComparer
durch dieIComparer
- Schnittstelle, die Unterstützung von Sekundär/Spalte Priorität Sortieren.Ich überschreiben
Compare()
Methode zur Unterstützung der numerischen, Datums - & groß-und Kleinschreibung string-Vergleich.Wird es zuerst Sortieren Sie die Spalte, die Sie wollen, wenn die beiden verglichenen Werte gleich sind, wird es nehmen Sie die zweite Spalte als Referenz für die Sortierung, daher sekundäre Sortierung.
Die Sie gerade brauchen, um das sorter-Klasse, und ändern Sie die Form der Listview
ColumnClick
- Ereignis mit dem folgenden Beispiel VB.Net code:ListViewItemComparer Klasse
Windows-Formular Listview ColumnClick
Es ist wahrscheinlich nicht der effizienteste Weg, aber man kann nur Folgendes tun:
Beachten Sie die umgekehrte Sortierung.
Ist diese auf der web-oder Windows forms? Auf dem web können Sie zusammen mit einem Ausdruck, hat der Spalten, durch Komma getrennt, und pass es an die sort () - Methode des listview
Framework 3.5 und aber...
Gut, wenn Sie wollen einfach nur die Spalten, die sortiert werden, versuchen Sie es mit Liste; zum Beispiel wie folgt aus:
Habe es nicht ausprobiert, aber gerade denken eine schnelle Lösung.