Jetzt habe ich das getan, was ich schon längst hätte tun sollen: ich habe ein TestProject aufgesetzt, um dem ICOMPARER auf die Schliche zu kommen.
Eine datagridview DGVTEST mit zwei Spalten ... COLUMN1 und COLUMN2 ... Beide Spalten haben Sortmode PROGRAMATIC.
COLUMN2 wird (zur Kontrolle) ganz normal mit dgvTest.Sort(column, direction) sortiert.
COLUMN1 solll mit einem ICOMPARER case insensitive sortiert werden.
Per Default soll ASCENDING sortiert werden ... wenn die Reihenfolge aber schon ascending ist, dann soll DESCENDING sortiert werden.
Klickt man den Header von COLUMN2 an, dann wird die DGV korrekt aufsteigend (case sensitive) sortiert ... klickt man den Header noch einmal an, dann wird absteigend sortiert. Genau so wie gewünscht. Das sieht man an den letzen drei angehängten Screenshots.
Macht man das jetzt aber mit COLUM1, dann ist die Sortierreihenfolge vollkommen chaotisch ! Das sieht man an den ersten beiden Screenshots.
Ich habe inzwischen gravierende Zweifel daran, ob die COMPARE Routine richtig konzipiert ist !
KeyOld und KeyNew werden mit ToString in einen STRING umgewandelt (was immer dabei jetzt heraus kommt !) ... Das ist notwendig, weil COMPARETO strings als Operanden verlangt. Was um alles in der Welt macht dieser Vegleich ? Und warum sollte er die Spalte COLUM1 in Betracht ziehen !
Dass hier etwas gravierend im Argen liegt, sieht man, wenn man einfach mal spaßeshalber die Reihenfolge der Operanden vertauscht:
Jetzt bleibt die Reihenfolge der DGV einfach unverändert !
Also .... so kann das nicht funktionieren. Hat jemand eine Idee, wie man das Ding zum Laufen kriegen kann ?
Das Projekt habe ich angehängt ... es hat gerade mal 100 Zeilen Code ...
LG
Peter
Eine datagridview DGVTEST mit zwei Spalten ... COLUMN1 und COLUMN2 ... Beide Spalten haben Sortmode PROGRAMATIC.
COLUMN2 wird (zur Kontrolle) ganz normal mit dgvTest.Sort(column, direction) sortiert.
COLUMN1 solll mit einem ICOMPARER case insensitive sortiert werden.
Per Default soll ASCENDING sortiert werden ... wenn die Reihenfolge aber schon ascending ist, dann soll DESCENDING sortiert werden.
Klickt man den Header von COLUMN2 an, dann wird die DGV korrekt aufsteigend (case sensitive) sortiert ... klickt man den Header noch einmal an, dann wird absteigend sortiert. Genau so wie gewünscht. Das sieht man an den letzen drei angehängten Screenshots.
Macht man das jetzt aber mit COLUM1, dann ist die Sortierreihenfolge vollkommen chaotisch ! Das sieht man an den ersten beiden Screenshots.
Ich habe inzwischen gravierende Zweifel daran, ob die COMPARE Routine richtig konzipiert ist !
VB.NET-Quellcode
- Public Function Compare(ByVal KeyOld As Object, ByVal KeyNew As Object) As Integer Implements IComparer.Compare 'Ignore case
- 'ignore case
- Dim myKeyOld = KeyOld.ToString.ToUpper
- Dim myKeyNew = KeyNew.ToString.ToUpper
- Dim retval = myKeyNew.CompareTo(myKeyOld)
- Debug.Print("KeyOld - KeyNew: " & KeyOld.ToString & " - " & KeyNew.ToString & " --> " & retval.ToString)
- Return retval
- End Function
KeyOld und KeyNew werden mit ToString in einen STRING umgewandelt (was immer dabei jetzt heraus kommt !) ... Das ist notwendig, weil COMPARETO strings als Operanden verlangt. Was um alles in der Welt macht dieser Vegleich ? Und warum sollte er die Spalte COLUM1 in Betracht ziehen !
Dass hier etwas gravierend im Argen liegt, sieht man, wenn man einfach mal spaßeshalber die Reihenfolge der Operanden vertauscht:
Jetzt bleibt die Reihenfolge der DGV einfach unverändert !
Also .... so kann das nicht funktionieren. Hat jemand eine Idee, wie man das Ding zum Laufen kriegen kann ?
Das Projekt habe ich angehängt ... es hat gerade mal 100 Zeilen Code ...
LG
Peter
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()