Neu vorgestellt, Programmierung

Neue Sortiermöglichkeit für die DataList

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 Kommentare

3 Kommentare “Neue Sortiermöglichkeit für die DataList”

  1. 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?

Kommentar abgeben