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 TlistView Spalten sortieren (https://www.delphipraxis.net/9934-tlistview-spalten-sortieren.html)

skorsi 8. Okt 2003 09:01


TlistView Spalten sortieren
 
Hallo,

wie kann ich in einer TListView die Spalten in einer vorgegeben Reihenfolge sortieren:?:

Danke,
skorsi

sakura 8. Okt 2003 09:03

Re: TlistView Spalten sortieren
 
In folgendem Beitrag findest Du ein Beispiel zu AlphaSort und OnCompare. Das sollte Dir weiterhelfen.

http://www.delphipraxis.net/internal...ct.php?t=10718

...:cat:...

skorsi 8. Okt 2003 09:55

Re: TlistView Spalten sortieren
 
Ja aber ich möchte ja nicht den Inhalt der Spalten sortieren
sondern die Spalten selbst in eine best. Reihenfolge bringen.

Bsp. Spalten Name, Adresse, Tel.Nr
wird zu Tel.Nr, Adresse, Name


skorsi

sakura 8. Okt 2003 10:01

Re: TlistView Spalten sortieren
 
Hi skorsi,

tut mir echt leid, aber den kleinen "nebensächlichen" Punkt der Spalten habe ich überlesen :oops:

...:cat:...

sakura 8. Okt 2003 10:06

Re: TlistView Spalten sortieren
 
Ich weiss jetzt nicht welche Delphi Version Du hast, aber seit Delphi 4 hat die TListView die Eigenschaft FullDrag, die einfach auf True setzen und der User kann die Reihenfolge der Spalten beliebig ändern.

...:cat:...

skorsi 8. Okt 2003 10:14

Re: TlistView Spalten sortieren
 
Ja aber ich möchte dem User eben nur die Möglichkeit geben auf zwei Arten zu sortieren.
Deswegen habe ich im Menü auch den Punkt Sort by ...

skorsi 8. Okt 2003 10:37

Re: TlistView Spalten sortieren
 
Gibt es vielleicht eine andere Komponente bei der ich die Spalten so einfach sortieren kann?

sakura 8. Okt 2003 10:42

Re: TlistView Spalten sortieren
 
Okay, das war mir nicht klar. Dann kurz ein kleine Einweisung. Wenn Du die Columns im Editor anlegst, dan erhält jede eine eindeutige ID (Vergabe erfolgt automatisch) von 0 bis zur Anzahl der Spalten - 1. Damit kannst Du dann auf die Spalten immer eindeutig zugreifen und deren Index neu setzen.

Als erstes erst einmal die Herstellung der Standardsortierung für X Spalten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to Pred(ListView1.Columns.Count) do
    ListView1.Columns.FindItemID(I).Index := I;
end;
Nun zur bestimmten Neusortierung. Hier musst Du beachten, daß Du die Reihenfolge so festlegst, wie die Spalten erscheinen sollen, ansonsten wird das Ergebnis meist wir. Soll die (Original) 2. Spalten an erste Stelle, die dritte an zweite und die erste Spalte an dritte Stelle also

aus 0 - 1 - 2
wird 1 - 2 - 0

dann wäre folgender Code der benötigte:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  // ListView1.Columns.FindItemID(ORIGINAL POSITION).Index := NEUE POSITION
  ListView1.Columns.FindItemID(1).Index := 0;
  ListView1.Columns.FindItemID(2).Index := 1;
  ListView1.Columns.FindItemID(0).Index := 2;
end;
Ich hoffe, daß Dir das jetzt die gewünschte Lösung bringt.

...:cat:...

skorsi 8. Okt 2003 10:51

Re: TlistView Spalten sortieren
 
So sortiert er mir aber leider nur die Überschriften der Spalten.

sakura 8. Okt 2003 10:54

Re: TlistView Spalten sortieren
 
Sorry, das ist mir gar nicht aufgefallen, ist aber sehr leicht lösbar. Einfach jeweils ans Ende der Codestücke folgende Zeile einfügen und dann solltest Du aber glücklich sein :mrgreen:

Delphi-Quellcode:
  ListView1.Refresh;
...:cat:...

skorsi 8. Okt 2003 10:55

Re: TlistView Spalten sortieren
 
Nee sorry das Sortieren läuft nur irgendwie sau langsam ab.

sakura 8. Okt 2003 10:58

Re: TlistView Spalten sortieren
 
Na gut, dann solltest Du es mal noch wie folgend erweitern - viele Items hast Du eigentlich :shock:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  [color=#ff0000]ListView1.Items.BeginUpdate;
  try[/color]
    for I := 0 to Pred(ListView1.Columns.Count) do
      ListView1.Columns.FindItemID(I).Index := I;
    ListView1.Refresh;
  [color=#ff0000]finally
    ListView1.Items.EndUpdate;
  end;[/color]
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  [color=#ff0000]ListView1.Items.BeginUpdate;
  try[/color]
    ListView1.Columns.FindItemID(1).Index := 0;
    ListView1.Columns.FindItemID(2).Index := 1;
    ListView1.Columns.FindItemID(0).Index := 2;
    ListView1.Refresh;
  [color=#ff0000]finally
    ListView1.Items.EndUpdate;
  end;[/color]
end;
...:cat:...

skorsi 8. Okt 2003 10:58

Re: TlistView Spalten sortieren
 
Vielen Dank!!!!!!! :-D

Wenn man danach noch einen Refresh aufruft funktioniert alles problemlos!!!!!

sakura 8. Okt 2003 11:04

Re: TlistView Spalten sortieren
 
Super, das freut mich :-) Dann viel Spass weiterhin mit Delphi - auf das wir uns bald wiederlesen.

War ja eine schwere Geburt aber erfolgreich :mrgreen:

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.

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