Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Welche Möglichkeiten gibt es in ListView alph. zu sortieren. (https://www.delphipraxis.net/121437-welche-moeglichkeiten-gibt-es-listview-alph-zu-sortieren.html)

Popov 27. Sep 2008 15:28


Welche Möglichkeiten gibt es in ListView alph. zu sortieren.
 
Bisher habe ich noch nie alphabetisch in ListView sortiert, also kenne ich mich da nicht so besonders aus.

Was ich kenne ist die Sortierung von Caption über SortType stText. Das Problem ist allerdings, daß ich Daten sortieren will. Habe ich folgende Daten:

01.12.2008
02.12.2007

dann wird das Datum mit dem Jahr 2008 an die erste Stelle gesetzt, da das Jahr erst an der letzten Stelle vorkommt. Meine bisherige Notlösung war es das Jahr zuerst zu schreiben

2007-12-02
2008-12-01

aber das gefällt mir nicht.

Hat wer eine Idee wie man es trotzdem über die normale Schreibweise des Datums sortieren könne?

Bernhard Geyer 27. Sep 2008 15:35

Re: Welche Möglichkeiten gibt es in ListView alph. zu sortie
 
Du mußt selbst sortieren. stText führt eine (wie der Name nahelegt) ein dumme textuelle Sortierung durch.

toms 27. Sep 2008 15:39

Re: Welche Möglichkeiten gibt es in ListView alph. zu sortie
 
ListView1.CustomSort(...)

Popov 27. Sep 2008 19:56

Re: Welche Möglichkeiten gibt es in ListView alph. zu sortie
 
Danke, hat mir weitergeholfen.

Für alle die über die Suche nach gleichen Problem hier gelandet sind, hier eine kurze Zusammenfassung.

Es gibt zwei Möglichkeiten zu sortieren:

Möglichkeit 1

Delphi-Quellcode:
// Zuerst
ListView1.ViewStyle := vsReport;
ListView1.SortType := stData;

...

//OnCompare
procedure TForm1.ListView1Compare(Sender: TObject; Item1,
  Item2: TListItem; Data: Integer; var Compare: Integer);
begin
  if StrToDate(Item1.Caption) > StrToDate(Item2.Caption) then
    Compare := 1
  else
    if StrToDate(Item1.Caption) < StrToDate(Item2.Caption) then
      Compare := -1
    else
      Compare := 0;
end;

...

// Sortiert wird über Aufruf
ListView1.AlphaSort;

Möglichkeit 2

Delphi-Quellcode:
// Zuerst
ListView1.ViewStyle := vsReport;

...

function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
  if StrToDate(Item1.Caption) > StrToDate(Item2.Caption) then
    Result := 1
  else
    if StrToDate(Item1.Caption) < StrToDate(Item2.Caption) then
      Result := -1
    else
      Result := 0;
end;

...

// Sortiert wird über Aufruf
ListView1.CustomSort(@CustomSortProc, 0);


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz