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 [VirtualStringTree] Sortierung Frage. (https://www.delphipraxis.net/89871-%5Bvirtualstringtree%5D-sortierung-frage.html)

DIET3RIX 7. Apr 2007 15:50


[VirtualStringTree] Sortierung Frage.
 
Hallo Leute,

Ich benutze die VirtualStringTree Komponente und habe eine Frage zur Sortierung.

Wenn ich auf MainColumn klicke, dann wird das zwar sortiert, aber sieht ca. so aus:

1
10
100
101
...
110
111
...
2
20
usw.

Wie kann ich nach "1,2,3,4 ... 99,100,101" usw Sortieren?

THX voraus

Hier der Code (aus der Beispieldatei):

Delphi-Quellcode:
procedure TMain_Form.VST_DBHeaderClick(Sender: TVTHeader;
  Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  if Button = mbLeft then
  begin
    with Sender do
    begin
      if Column <> MainColumn then
        SortColumn := NoColumn
      else
      begin
        if SortColumn = NoColumn then
        begin
          SortColumn := Column;
          SortDirection := sdAscending;
        end
        else
          if SortDirection = sdAscending then
            SortDirection := sdDescending
          else
            SortDirection := sdAscending;
        Treeview.SortTree(SortColumn, SortDirection, False);
      end;
    end;
  end;
end;
Delphi-Quellcode:
procedure TMain_Form.VST_DBCompareNodes(Sender: TBaseVirtualTree; Node1,
  Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
  Data1, Data2: PTreeData;
begin
  Data1 := Sender.GetNodeData(Node1);
  Data2 := Sender.GetNodeData(Node2);
  Result := CompareText(Data1.ID, Data2.ID);
end;

Hawkeye219 7. Apr 2007 16:01

Re: [VirtualStringTree] Sortierung Frage.
 
Hallo,

es sollte genügen, die Vergleichsroutine anzupassen. Falls die IDs nur ganzzahlige Werte enthalten, geht es so:

Delphi-Quellcode:
procedure TMain_Form.VST_DBCompareNodes(Sender: TBaseVirtualTree; Node1,
  Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
  Data1, Data2: PTreeData;
begin
  Data1 := Sender.GetNodeData(Node1);
  Data2 := Sender.GetNodeData(Node2);
//  Result := CompareText(Data1.ID, Data2.ID);
  Result := StrToInt(Data1.ID) - StrToInt(Data2.ID);
end;
Vielleicht solltest du noch eine Fehlerbehandlung vorsehen.

Gruß Hawkeye

DIET3RIX 7. Apr 2007 16:04

Re: [VirtualStringTree] Sortierung Frage.
 
:oops:

Vielen Dank dir :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 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