ListView sortieren

  • Mal wieder diese Listviews :(

    Ich möchte gerne mein Listview sortieren, wenn ich auf die Spaltenüberschrift klicke. Bild vom LÖistview ist angehängt zum besseren Verständnis.

    Meine Funktion sieht so aus :

    [autoit]


    Func WM_NOTIFY2($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)

    [/autoit][autoit][/autoit][autoit]

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; Eine Spalte wurde angeklickt
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    Case $NM_DBLCLK
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hWndListView And $iCode = $NM_DBLCLK Then
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $aInfo[3] = [$hWndFrom, DllStructGetData($tInfo, "Index"), DllStructGetData($tInfo, "SubItem")]
    open($aInfo)
    EndIf
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY2

    [/autoit]

    Er sortiert da zwar was, aber keine Ahnung was. Es geht hauptsächlich um die Spalte Dist. Nur irgendwie sortiert er das nach Kriterien die ich nicht erkenne.

    Also, wo hab ich jetzt den Fehler?

  • guck dir mal

    [autoit]

    _GUICtrlListView_SimpleSort()

    [/autoit]

    genauer an
    einfach nur gui, dann true oder false, dann die col, z.b.1 ( 2. col)
    wenn das einmal ausgewählt hat, kannste ja noch amchen, dass true zu false und andersherum wechselt

    Edit1:
    was mir grad ins auge stach: warum mit GUIRegisterMsg()?
    warum nicht einfach als case in die whileschleife?

  • zum GuiRegisterMsg

    Aus der Hilfe übernommen. Deswegen :)

    Zitat

    guck dir mal

    [Blockierte Grafik: http://www.autoit.de/wcf/icon/codeS.png] AutoIt-Quellcode
    1

    _GUICtrlListView_SimpleSort()

    genauer an
    einfach nur gui, dann true oder false, dann die col, z.b.1 ( 2. col)

    Wenn ich das rallen würde dann sähe es besser aus.
    So?

    [autoit]


    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING , 3)

    [/autoit]


    $B_DESCENDING : wie setze ich das auf True bzw. false?

    Sortiert wieder falsch. Bemerke grade, dass da doch ein System hintersteckt und zwar beachtet er nur die erste Stelle und nicht die komplette Zahl. Kann das daran liegen das da ein Punkt (.) anstatt ein Komma zwischen ist oder vielleicht an dem km dahinter ??

  • Stimmt Lösung wäre sinnvoll. Es MUSS das km hinter den Zahlen weg sonst geht´s nicht. Punkt usw., da haste Recht, ist egal. Zumindestens hat es das bei mir gebracht :)

    Ach ja, GuiRegisterMsg, da war doch was, mom. ;)

    Ok, das wird länger dauern bis ich raus hab, wie ich die in einem Case aufrufe. Kann auch sein das ich einfach zu müde bin und nicht mehr durch steige :sleeping:

    Einmal editiert, zuletzt von MrB (21. April 2010 um 21:23)

  • So, kram den Thread nochmal aus.

    Zitat

    zuu deiner frage, auch wenn es schon geklärt ist, er sortiert nach kriterien, da ist es egal, ob komma, punkt oder sonst etwas
    allerdings wollen wir alle sicherlich gerne die lösung hören ;) (hoffendlich ohne GUIRegisterMsg()!)

    Genau daran scheiter ich im Moment. Pls einen Tip, Bsp. irgendwas in die richtige Richtung, wie man GUIRegisterMsg() ersetzen kann