Guten Morgen.
Ich habe ein kleines Problem beim Sortieren einer ListView. Darin stehen Schulklassen, und diese will ich dann nach Jahrgang sortieren.
Mit dem Befehl _GUICtrlListView_SimpleSort() funktioniert das auch ganz gut. Bloß wird dann zB die 10b über die 5a gestellt, weil die erste Ziffer
kleiner ist. Aber es wäre besser wenn das Programm nach ganzen Jahrgängen sortiert. Gibt es einen Befehl, der nach diesen Kriterien sortiert? Oder muss man jede Klasse einzeln überprüfen, und dann in der Liste hoch, bzw. runter schieben?
Hier ist noch der Code:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>
;Dateipfad
$file = @ScriptDir & "\data\class.ini"
#region ##### START GuiCreate section #####
$hGui = GUICreate("Klassen editieren", 450, 300)
;Erstellt Liste
$LblKlasse = GUICtrlCreateLabel("Aktuelle Klassen: ", 8,
$Liste = GUICtrlCreateListView("Klasse|Schülerzahl", 8, 30, 250, 250)
_GUICtrlListView_SetColumnWidth($Liste, 0, 100)
_GUICtrlListView_SetColumnWidth($Liste, 1, 146)
;Buttons
$BtnBestaetigen = GUICtrlCreateButton("Bestätigen", 315, 265, 130, 30)
$BtnSortieren = GUICtrlCreateButton("Sortieren", 145, 3, 100, 25)
;Gruppe "Neue Klasse"
$GruppeNeueKlasse = GUICtrlCreateGroup("Neue Klasse", 290, 8, 150, 93)
$LblNeueKlasse = GUICtrlCreateLabel("Klasse: ", 300, 32)
$InputNeueKlasse = GUICtrlCreateInput("", 350, 28)
$BtnNeueKlasse = GUICtrlCreateButton("Erstellen", 300, 65, 130, 30)
;Gruppe "Klasse löschen"
$GruppeKlasseLoeschen = GUICtrlCreateGroup("Klasse löschen", 290, 110, 150, 93)
$LblKlasseLoeschen = GUICtrlCreateLabel("Markieren Sie eine Klasse und" &@CRLF& "klicken Sie auf den Button" &@CRLF& "um diese zu löschen.", 296, 125)
$BtnKlasseLoeschen = GUICtrlCreateButton("Löschen", 300, 167, 130, 30)
;Füllt die Liste mit Klassen die schon existieren
if FileExists($file) Then
Local $array = IniReadSection($file, "Klassen")
if not @error Then
for $i = 1 To $array[0][0]
$sTmp = IniRead($file, "Klassen", $array[$i][0], "mungo")
$text = $array[$i][0] & "|" & $sTmp
GUICtrlCreateListViewItem($text, $Liste)
next
EndIf
EndIf
GUISetState(@SW_SHOW)
#endregion ##### END GuiCreate section #####
;END GuiCreate section
;Hauptschleife
while 1
$nMsg = GUIGetMsg()
Switch $nMsg
case $GUI_EVENT_CLOSE
_KlasseSortieren()
Exit
case $BtnNeueKlasse
_KlasseErstellen($InputNeueKlasse)
GUICtrlSetData($InputNeueKlasse, "")
case $BtnKlasseLoeschen
_KlasseLoeschen()
case $BtnSortieren
_KlasseSortieren()
case $BtnBestaetigen
_KlasseSortieren()
Exit
EndSwitch
WEnd
func _KlasseErstellen($input)
;Schreibt die Klasse in eine Ini-Datei
$input = GUICtrlRead($input)
IniWrite($file, "Klassen", $input, 0)
$text = $input & "|" & IniRead($file, "Klassen", $input, "")
;Fügt die Klasse zur Liste hinzu
GUICtrlCreateListViewItem($text, $Liste)
EndFunc ;==> _KlasseErstellen($InputNeueKlasse)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]func _KlasseLoeschen()
;Löscht die Klasse aus der Ini-Datei
$sTmp = _GUICtrlListView_GetItemTextString($Liste)
$key = StringSplit($sTmp,"|")
IniDelete($file, "Klassen", $key[1])
;Löscht die Klasse aus der Liste
GUICtrlDelete(GUICtrlRead($Liste))
EndFunc ;==> _KlasseLoeschen()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]func _KlasseSortieren()
;Sortieren der Liste
Local $vDescending[_GUICtrlListView_GetColumnCount($Liste)]
_GUICtrlListView_SimpleSort($Liste, $vDescending, 0)
;Alte Ini-Datei löschen
IniDelete($file, "Klassen")
;Neue Ini-Datei erstellen (aus Daten der ListView)
Local $iCount = _GUICtrlListView_GetItemCount($Liste)
Local $iColumn = _GUICtrlListView_GetColumnCount($Liste)
Local $aListData[$iCount+1][$iColumn]
$aListData[0][0] = $iCount
for $i = 1 To $iCount
$aTmp = _GUICtrlListView_GetItemTextArray($Liste, $i - 1)
IniWrite($file, "Klassen", $aTmp[1], $aTmp[2])
Next
EndFunc ;==> _KlasseSortieren()
[/autoit]Mfg