Sortierung nach mehreren Spalten in ListCtrl

Plattformunabhängige GUIs mit wxWidgets.
Antworten
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Samstag 18. November 2006, 22:36

Hi Leute!

Hatte zuuuufällig schon mal jemand das Problem, dass er die Daten in einer Liste nicht nur nach einer Spalte sortieren wollte?

Ich habe ein Beispiel:
Personen mit Nachnamen und Vornamen in einer Liste. Wenn es viele Müllers gibt, sollten die natürlich zusätzlich zur Sortierung nach dem Nachnamen auch nach ihrem Vornamen sortiert sein.
In meinem Fall sieht es so aus:
http://aycu27.webshots.com/image/4386/2 ... 334_rs.jpg
Guckt euch mal Bake (Nachname) an. Da klappt das nicht.

Die Methode "GetSecondarySortValues" in
C:\Python24\Lib\site-packages\wx-2.6-msw-ansi\wx\lib\mixins\listctrl.py verstehe ich leider nicht.

Vielleicht hatte ja mal jemand dasselbe Problem
Grüße
Jamil
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Mittwoch 22. November 2006, 21:19

Bin ich der einzige, der sich so etwas wünscht?

.. Regards
Jamil
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Donnerstag 23. November 2006, 09:33

JR hat geschrieben:Bin ich der einzige, der sich so etwas wünscht?

.. Regards
Jamil
Hi Jamil,

Interessante Frage. Also praktisch wie in Excel, da kann man auch nach mehreren Spalten sortieren.
Da ist auch die Frage der Visualisierung. Auf die Art

Zuname Vorname Telefon etc
v1 ^2

könnte man es machen.

Das SecondarySortValue kannst du in der abgeleiteten Klasse überschreiben, wenn du andere Sortkriterien hast.
Habe ein Bsp gefunden (leider funktioniert das nicht ganz so).
in etwa:

Code: Alles auswählen

from wx.lib.mixins import listctrl

    def MyColumnSorter(self, key1, key2):
        col = self._col
        ascending = self._colSortFlag[col]
        item1 = self.itemDataMap[key1][col]
        item2 = self.itemDataMap[key2][col]

        cmpVal = cmp(str(item1), str(item2))

        # If the items are equal then pick something else to make the sort value unique
        if cmpVal == 0:
            cmpVal = apply(cmp, self.GetSecondarySortValues(col, key1, key2))

        if ascending:
            return cmpVal
        else:
            return -cmpVal

    def GetColumnSorter(self):
        """Returns a callable object to be used for comparing column values when sorting."""
        return self.MyColumnSorter
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Donnerstag 23. November 2006, 09:47

Hi Francesco!

Der Code entspricht im Prinzip genau den zwei Methoden aus dem Modul wx.lib.mixins.listctrl.py

Ich hoffe, es gibt jemanden, der das direkt schon mal eingesetzt hat, um nach mehreren Spalten zu sortieren.
Schlüssel mit mehreren Schlüsselkriterien zum Sortieren von Datensätzen sind ja nichts ungewöhnliches.

Viele Grüße
Jamil
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Donnerstag 23. November 2006, 10:17

JR hat geschrieben:Hi Francesco!

Der Code entspricht im Prinzip genau den zwei Methoden aus dem Modul wx.lib.mixins.listctrl.py

Ich hoffe, es gibt jemanden, der das direkt schon mal eingesetzt hat, um nach mehreren Spalten zu sortieren.
Schlüssel mit mehreren Schlüsselkriterien zum Sortieren von Datensätzen sind ja nichts ungewöhnliches.

Viele Grüße
Jamil
Hi Jamil,
leider habe ich kein Beispiel gefunden. Du könntest ja der erste sein, der sowas impementiert, was ich aber auch wieder nicht glaube. :)

Google (Groups)? Oder weiss wer anderer weiter? Gerold?

Wenn du eine schöne Lösung gefunden hast, könntest du ja eine wxpython wiki page (ein recept) schreiben. :roll:

BTW: in nächster Zeit werde ich selten einen Blick ins Python Forum werfen, da ich wenig Zeit habe (falls es überhaupt wen interessieren sollte :) ).
Antworten