Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Sortieren nach zwei Spalten (https://www.delphipraxis.net/157541-sortieren-nach-zwei-spalten.html)

Jack and the Juice 15. Jan 2011 16:40

Datenbank: MyBase XML • Version: k.A. • Zugriff über: ClientDataSet

Sortieren nach zwei Spalten
 
Hallo,

mein erster Beitrag und ich hoffe, dass Ihr mir gleich weiterhelfen könnt. Ich bin dabei eine kleine Datenbankanwendung zu schreiben zum Verwalten des Weinkellers :)

Ich speichere die Daten mit einem ClientDataSet in einer XML-Datei und stelle sie in einem DBGrid dar. Nun möchte ich aber gerne, dass die Einträge zunächst nach Land und Region (also z.B. Deutschland - Nahe) sortiert werden und im zweiten Schritt dann noch alphabetisch nach Namen. Die Sortierung nach Land/Region habe ich bereits mit ein wenig Hilfe aus dem Forum selbst lösen können, das Problem ist nun noch die zusätzliche Sortierung nach Name.

Hier der Quellcode für die erste Sortierung:

Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  IndexName: string;
  IndexFelder: string;
  MaxIdx,
    i: integer;
begin
  indexfelder:='Land';
  clientdataset1.IndexDefs.Update;
  { Fesstellen ob bereits ein Index mit den aktuellen Feldern existiert }
  for I := 0 to Pred(clientdataset1.IndexDefs.Count) do
    if (clientdataset1.IndexDefs.Items[I].Fields = IndexFelder) then
      begin
        if (not true) and (ixDescending in clientdataset1.IndexDefs.Items[i].Options) then
          begin
            { Diesen Index als aktuellen Index der Tabelle aktivieren }
            clientdataset1.IndexName := clientdataset1.IndexDefs.Items[i].Name;
            exit;
          end;
        if (true) and (not (ixDescending in clientdataset1.IndexDefs.Items[i].Options)) then
          begin
            { Diesen Index als aktuellen Index der Tabelle aktivieren }
          clientdataset1.IndexName := clientdataset1.IndexDefs.Items[i].Name;
            exit;
          end;
      end;
  { Neuen Namen finden }
  MaxIdx := 0;
  for i := 0 to Pred(clientdataset1.IndexDefs.Count) do
    if Copy(clientdataset1.IndexDefs.Items[i].Name, 1, 4) = 'AUT_' then
      MaxIdx := StrToInt(Copy(clientdataset1.IndexDefs.Items[i].Name, 5, 3));
  Inc(MaxIdx);
  IndexName := 'AUT_' + IntToStr(MaxIdx);
  if true then
    clientdataset1.IndexDefs.Add(IndexName, IndexFelder, [ixCaseInsensitive])
  else
   clientdataset1.IndexDefs.Add(IndexName, IndexFelder, [ixCaseInsensitive,
      ixDescending]);
  clientdataset1.IndexName := IndexName;
end;
Ich hoffe, dass mir irgendjemand dort behilflich sein kann.

Vielen Dank schonmal und viele Grüße aus dem hohen Norden ;)

jackandthejuice

marabu 16. Jan 2011 19:54

AW: Sortieren nach zwei Spalten
 
Herzlich willkommen in der Delphi-PRAXiS.

Es ist hilfreich, wenn Du die von Dir verwendete Delphi-Version angibst.

Hast Du schon die Kapitel über die Verwendung von TClientDataSet in der Online-Hilfe gelesen?

Einen Index würde ich nicht erst beim Klicken auf einen Spaltentitel im DBGrid erzeugen. Das kannst Du sofort nach dem Aktivieren des Dataset erledigen. Wenn Du aber eine Ad-Hoc-Erzeugung wünschst, dann solltest Du die Eigenschaft IndexFieldNames verwenden. Willst Du nach Land und Bezeichnung sortieren, dann musst Du den String 'Land;Bezeichnung' zuweisen.

Grüße vom marabu


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