Mit der Version 5.7.05 bekommt die DataList die Möglichkeit, ein von der Anzeige unabhängiges Sortierkriterium zu definieren. Auf diese Neuerung möchte ich in meinem Artikel etwas genauer eingehen. Die Freigabe der 5.7.05 ist aktuell für den 23. Oktober 2013 geplant.
Neuerungen
Die erste Neuerung betrifft die Spalten-Objekte der DataList. Diese wurden um die Eigenschaft wpClmTypeSort
erweitert. Anhand der Eigenschaft wird der Sortiertyp für die entsprechende Spalte festgelegt. Folgende Typen können ausgewählt werden:
_TypeNone
entspricht der Sortierung der Liste nach den angezeigten Daten. Dies ist der Standardwert.
Die Typen _TypeAlpha
, _TypeBool
, _TypeByte
, _TypeInt
, _TypeBigInt
, _TypeFloat
, _TypeDecimal
, _TypeDate
, _TypeTime
und _TypeWord
werden nach dem Angegebenen Datentyp sortiert.
Weiterhin haben die Befehle WinLstCellGet
und WinLstCellSet
einen neuen Modus erhalten. Mit der Option _WinLstDatModeSortInfo
kann so der Sortierwert einer Zeile gesetzt bzw. abgefragt werden.
Beim Setzen der Eigenschaft wpClmTypeSort
einer Spalte sollte darauf geachtet werden, dass jeder Zeile ein entsprechender Sortierwert zugewiesen wird. Ansonsten ist das Resultat der Sortierung nicht definiert!
Soll wpClmTypeSort
zur Laufzeit gesetzt werden, muss die Liste leer sein. Dynamisch angelegten Spalten dürfen noch nicht mit WinAdd
zu einer Liste hinzugefügt worden sein.
Sortieren über mehrere Spalten
Durch die Erweiterung der DataList ist es möglich, über mehrere Spalten zu sortieren.
So kann zum Beispiel in einer Liste, die unter anderem eine Spalte für das Datum und eine weitere Spalte für die Uhrzeit hat, nach dem Zeitstempel des Datums und der Uhrzeit sortiert werden.
Zuerst müssen die Eigenschaften der Spalten gesetzt werden. Wird dies prozedural gemacht, müssen die oben beschrieben Punkte beachtet werden. Dabei wird die Spalte Datum über einen Zeitstempel sortiert. Die Spalte Uhrzeit erhält keine Sortierung.
// ...
{
// ...
// BigInt als Sortiertyp (= Zeitstempel)
tColumnDate->wpClmTypeSort # _TypeBigInt;
tColumnDate->wpClmSortFlags # _WinClmSortFlagsAutoActive
tColumnDate->wpClmSortImage # _WinClmSortImageKey;
// Sortierung für Uhrzeit abschalten
tColumnTime->wpClmTypeSort # _TypeNone;
tColumnTime->wpClmSortFlags # tColumnDate->wpClmSortFlags & ~_WinClmSortFlagsAutoActive;
tColumnTime->wpClmSortImage # _WinClmSortImageNone;
}
Im nächsten Schritt muss für jede Zeile der Spalte Datum der Sortierwert gesetzt werden. Dabei ist zu beachten, dass der Typ des Sortierkriteriums dem der Eigenschaft wpClmTypeSort
entspricht.
// ...
{
// ...
// Zeitstempel erstellen
tCaltime->vpDate # 18.10.2013;
tCaltime->vpTime # 13:11:00;
tTimeStamp # CnvBC(tCaltime); // BigInt-Zeitstempel
//Sortierungswert der letzten Zeile setzen
tDataList->WinLstCellSet(tTimeStamp, sColumnDate, _WinLstDatLineLast, _WinLstDatModeSortInfo);
}
Ein Beispiel zu diesem Thema werden wir Ihnen in der CodeLibrary zur Verfügung stellen.
3 Antworten
Ja, das stimmt, die RecList ist natürlich ein ganz anderer Fall, das habe ich bei meiner Nachfrage nicht berücksichtigt. Danke für die Korrektur.
Bei der RecList werden die Datensätze über den Datenbankschlüssel gelesen. Hier muss ein entsprechender Schlüssel angelegt werden, der dem Sortierkriterium entspricht.
Das ist in meinen Augen eine sehr gute Erweiterung. Insbesondere die neue Möglichkeit über mehrere Spalten zu sortieren, habe ich bisher schon manches Mal vermisst.
Wird es diese Möglichkeit auch für RecLists geben?