Den Workaround braucht man nicht!
Man holt sich das Handle vom Listview-Header und benutzt dann die Headerbefehle.
Aber das sortieren im Listview ist sehr langsam, vor allem, wenn es viele Einträge gibt.
Viel schneller geht das, wenn man die Daten in einem Array speichert und dieses sortiert. Also: Listview komplett löschen, Array sortieren und das Listview wieder mit dem sortierten Array befüllen.
Ich habe dazu mal ein Beispielscript geschrieben:
Code
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Global $sHeader = 'Typ|Stock|BT|ZNr.|Büro|Abt.|Benutzer|Hersteller|Modell|Inventarname|Seriennummer|MAC|Hinweise|Telearbeit'
Global $aLVItems[500][14], $iSortCol = 0, $iOldCol = -1, $iDescending = False
Global $hGui = GUICreate('Test', 800, 600)
Global $idListview = GUICtrlCreateListView($sHeader, 10, 10, 780, 580)
Global $hLVheader = _GUICtrlListView_GetHeader($idListview)
_GUICtrlListView_RegisterSortCallBack($idListview)
GUISetState()
_FillLVwithRandomData()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GUICtrlListView_UnRegisterSortCallBack($idListview)
Exit
Case $idListview
If $iOldCol > -1 Then _GUICtrlHeader_SetItemFlags($hLVheader, $iOldCol, 0)
$iSortCol = GUICtrlGetState($idListview)
If $iSortCol = $iOldCol Then $iDescending = Not $iDescending
_GUICtrlListView_BeginUpdate($idListview)
; diese Zeile dauert lange, weil das sortieren im Listview langsam ist
;~ _GUICtrlListView_SortItems($idListview, GUICtrlGetState($idListview))
; diese drei Zeilen sind die schnellere Alternative
_GUICtrlListView_DeleteAllItems($idListview)
_ArraySort($aLVItems, $iDescending, 0, 0, $iSortCol)
_GUICtrlListView_AddArray($idListview, $aLVItems)
_GUICtrlListView_EndUpdate($idListview)
_GUICtrlHeader_SetItemFlags($hLVheader, $iSortCol, $iDescending ? 8 : 4)
$iOldCol = $iSortCol
EndSwitch
WEnd
Func _FillLVwithRandomData()
For $iRow = 0 To UBound($aLVItems, 1) - 1
For $iCol = 0 To UBound($aLVItems, 2) - 1
$aLVItems[$iRow][$iCol] = Random(10000, 99999, 1)
Next
Next
_GUICtrlListView_AddArray($idListview, $aLVItems)
EndFunc
Alles anzeigen