AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Sortieren nach zwei Spalten
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren nach zwei Spalten

Ein Thema von Jack and the Juice · begonnen am 15. Jan 2011 · letzter Beitrag vom 16. Jan 2011
Antwort Antwort
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#1

Sortieren nach zwei Spalten

  Alt 15. Jan 2011, 17:40
Datenbank: MyBase XML • Version: k.A. • Zugriff über: ClientDataSet
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

AW: Sortieren nach zwei Spalten

  Alt 16. Jan 2011, 20:54
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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