autoiter um _GUICtrlListView_SortItems nutzen zu können benötige ich _GUICtrlListView_RegisterSortCallBack(. Ohne Funktioniert das gar nicht.
Oscar Ja, da hast du recht. Da ging es aber um eine andere Sortierung (Selbes Programm, andere Stelle :)).
Ich habe das nun mit Hilfe deiner Ideen selbst gelöst.
Ich ziehe das ganze von der Datenbank, direkt so sortiert, wie ich das brauche und spiele es im ListView ein. Durch eine Boolsche variable gebe ich mit ob True oder False und setze somit auch das häckchen :),
Es ist zwar noch immer nicht ultra schnell, aber min 80% schneller als vorher :).
Danke euch!
Code
Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $ListView1
If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
;~ ; Kick off the sort callback
;~ _GUICtrlListView_BeginUpdate($ListView1)
;~ _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
;~ _GUICtrlListView_EndUpdate($ListView1)
; No return value
SQLOPEN()
Local $iIndex
For $i = 0 To UBound($g_aRadio) - 1
If GUICtrlRead($g_aRadio[$i][0]) = 1 Then $iIndex = $i
Next
$getrecord = _MSSQL_GetRecord($sqlCon, "TabelleA", "*", "Order by " & $headItems[DllStructGetData($tInfo, "SubItem")][0] & " " & $sort)
SQLCLOSE()
If $sort = "asc" Then
updateListView(False, True, DllStructGetData($tInfo, "SubItem"), $HDF_SORTUP)
$sort = "desc"
ElseIf $sort = "desc" Then
updateListView(False, True, DllStructGetData($tInfo, "SubItem"), $HDF_SORTDOWN)
$sort = "asc"
EndIf
;(......)
EndFunc
Func updateListView($autosize = true, $setformat = False, $column = 0, $format = 0)
_GUICtrlListView_BeginUpdate($ListView1)
_GUICtrlListView_DeleteAllItems($ListView1)
_ArrayDelete($getrecord, 0)
_GUICtrlListView_AddArray($ListView1, $getrecord)
;~ SORTIERPFEIL ENTFERNEN UND AUTOSIZE HEADER
For $i = 0 To _GUICtrlListView_GetColumnCount($ListView1) - 1
$aInfo = _GUICtrlListView_GetColumn($ListView1, $i)
_GUICtrlListView_SetColumn($ListView1, $i, $aInfo[5])
If $autosize = True Then _GUICtrlListView_SetColumnWidth($ListView1, $i, $LVSCW_AUTOSIZE_USEHEADER)
Next
;~ SETZE SORTIERHÄCKCHEN WENN GEWÜNSCHT
If $setformat = True Then
$header = _GUICtrlListView_GetHeader($ListView1)
$aFormat = _GUICtrlHeader_GetItemFormat($header, $column)
_GUICtrlHeader_SetItemFormat($header, $column, BitXOR($aFormat, $format))
EndIf
_GUICtrlListView_EndUpdate($ListView1)
EndFunc ;==>updateListView
Alles anzeigen