Vorgestellt: ADVListview aus dem TMS Component Pack Pro – Teil 3

AdvListView und die Sortierung

AdvListView ist eine Alternative zu einem Grid, besonders, wenn man Komponenten nicht direkt mit Daten verknüpfen möchte. Also: Daten holen, an die ListView übergeben – Vorteil eines solchen Verfahren ist, dass nicht ständig auf den Datenbankserver zugegriffen werden muss, was den entsprechenden Datenbankverkehr im Netz entlastet. Insbesondere, wenn man die Daten vielleicht nach anderen Spalten sortieren möchte oder in einer anderen Reihenfolge.

Trotz aller Vorteile und schönen Features gibt es auch ein paar Punkte, sprich Sortierung, bei der man (zumindest ich) zu kämpfen hat.

Grundsätzlich funktioniert das Ganze ja recht einfach: SortShow sollte = True sein. Damit nun die Komponente aber auch weiß, welcher Datentyp in den einzelnen Spalten verarbeitet werden soll, muss dieser der Komponente nun auch mitgeteilt werden. AdvListView müssen naturgemäß ja alle Daten als Strings übergeben werden, auch wenn diese Strings Datums- oder numerische Werte enthalten.

Hierzu dient wiederum das OnGetFormat Ereignis:

advlisteGetFormat(Sender: TObject; ACol: Integer; var AStyle: TSortStyle; var aPrefix, aSuffix: string);

Problem Nr. ist, dass aCol, welches die Spalte präsentiert, zwar wie bei Delphi üblich bei Null beginnt, interessanterweise bei mir aber zunächst mal zu einem Problem führt, denn zumindest bei mir fängt advliste.columns[acol] bei eins an zu zählen.

Nun, merkwürdig, aber nicht tragisch, lautet dann halt die erste Zeile Inc(acol), danach klappt es.

Zunächst ist es sinnvoll nicht die Nummer der Spalte als Grundlage zu nehmen, sondern z.B. die Caption – Eigenschaft oder alternativ eine TAG-Eigenschaft, da ansonsten bei mir Probleme auftraten, wenn eine Spalte per Drag & Drop an eine andere Position verschoben wurde.

Ein weiteres Problem stellen Datumswerte dar, die Komponente folgt den Einstellungen in der Windows Systemsteuerung (ssShortDate), entsprechend sollten auch die Datumswerte formatiert sein, TDatetime Werte sind u.U. zu zerlegen in einen Datums- und in einem Zeitteil.

Das Ganze lässt sich dann z.B. so auswerten:

if advliste.Columns[acol].Caption=’Datum‘ then
aStyle:=ssDate;

Schwierigkeiten bereitet der Zeitanteil, mit keiner TSortStyle – Eigenschaft gelang es mir bisher Spalten mit Werten wie 00:40 oder 14:30 zu sortieren. Unproblematisch ist die Sortierung nach Zeichenketten.

Aktuell treten bei AdvListView Porbleme auf, wenn man eine Spalte mit Datumswerten verschiebt und dann sortiert, dies ist ein Bug! soll aber bald gelöst sein (vermutlich mit dem nächsten Release etwa Mitte August 2011).

Unterstützte Datentypen/Verfahren von TSortStyle:

TSortStyle = (ssAutomatic, ssAlphabetic, ssNumeric, ssDate, ssAlphaNoCase, ssAlphaCase,
ssShortDateEU, ssShortDateUS, ssCustom, ssFinancial, ssRaw);

Ein weiterer Nachteil von AdvListView ist, dass es keine eingebaute Eigenschaft gibt, anders als bei Outlooklist oder den Grids, die aktuelle Spaltenposition abzuspeichern.

Natürlich wird keine Komponente alles genau so machen, wie man es braucht – entsprechend besteht da für mich noch Lernaufwand und schätzungsweise individueller Erweiterungsaufwand.

Werbung & Infos:

Sicher im Home Office –  Angebote Antivirus & Internet Security

» Avira Prime mit 65% Rabatt 
» Bitdefender Antivirus, Internet Security und Total Security mit bis zu 62% Rabatt


Aktuelles Bitdefender Angebot


Verwandte Themen: