> kennt jemand eine Lösung um bei der Alphabetischen-Sortierfolge
> einer Listbox die Umlaute korrekt zu sortieren?
Na ja, ich habe eine App wo ich zur Design-Zeit nicht weiss, welche Datenbank
der Benutzer wählt und welche Felder er für die Datenbanktabellen definiert.
Welche Felder wo in den Listboxen angezeigt werden, dass kann er auch selber
wählen.
Daher versuche ich die Sortierung nicht auf die Datenbank zu schieben und so
habe ich eine checkbox unter den Preferences eingebaut, wo der Benutzer selber
entscheiden kann, ob er eine schnelle Sortierung wünscht, oder eine langsame,
wo besondere Zeichen 'richtig' eingeordnet werden.
In einem Modul habe ich eine Method 'AsciiSort' welche einen String zur
Benutzung in strcomp vorbereitet (und das dauert...) Siehe code ganz unten.
Dann habe ich eine Methode für das Sortieren meiner Listboxen. (Bein Füllen der
Listbox wird im CellTag der Datentyp abgelegt).
Keine Ahnung, ob man das effizienter gestalten könnte.
Code:
========
Function imListboxCompareRows(row1 as Integer, row2 as Integer, column as
Integer, ByRef result as Integer, ColType As String, lbox As imListbox) As
Boolean
SELECT CASE ColType.Uppercase
CASE "TEXT"
// The user can switch off strComp in Preferences
If SUPRT.DoQuickSort Then Return False
result = StrComp(lbox.Cell(row1, column).AsciiSort, lbox.Cell(row2,
column).AsciiSort,1)
return True
CASE "NUMBER"
result = Sign( val( lbox.Cell( row1, Column )) - val( lbox.Cell( row2,
Column)))
Return True
CASE "DATE"
'Dim d1,d2 As Date
'd1 = Date(lbox.CellTag(row1, column))
'd2 = Date(lbox.CellTag(row2, column))
'If d1.TotalSeconds > d2.TotalSeconds Then
'result = 1
'ElseIf d1.TotalSeconds < d2.TotalSeconds Then
'result = -1
'Else
'result = 0
'End If
'Return True
// But as we use SQLDateString, we let REALStudio handle the comparison
Return False
CASE ELSE
Return False // Let REALStudio handle the comparison
END SELECT
End Function
=======
Function AsciiSort(Extends s As String) As String
If s <> "" Then
s = s.Lowercase
s = ReplaceAll(s, "ä", "a")
s = ReplaceAll(s, "å", "a")
s = ReplaceAll(s, "â", "a")
s = ReplaceAll(s, "ã", "a")
s = ReplaceAll(s, "á", "a")
s = ReplaceAll(s, "æ", "a")
s = ReplaceAll(s, "é", "e")
s = ReplaceAll(s, "è", "e")
s = ReplaceAll(s, "ê", "e")
s = ReplaceAll(s, "ë", "e")
s = ReplaceAll(s, "ï", "i")
s = ReplaceAll(s, "î", "i")
s = ReplaceAll(s, "ì", "i")
s = ReplaceAll(s, "í", "i")
s = ReplaceAll(s, "ö", "o")
s = ReplaceAll(s, "ô", "o")
s = ReplaceAll(s, "ò", "o")
s = ReplaceAll(s, "ó", "o")
s = ReplaceAll(s, "ü", "u")
s = ReplaceAll(s, "ù", "u")
s = ReplaceAll(s, "û", "u")
s = ReplaceAll(s, "ú", "u")
s = ReplaceAll(s, "ÿ", "y")
s = ReplaceAll(s, "ç", "c")
s = ReplaceAll(s, "ñ", "n")
s = ReplaceAll(s, "ž", "z")
s = ReplaceAll(s, "š", "s")
s = ReplaceAll(s, "ß", "s")
End If
Return s
End Function
=======
Oliver