Einzelnen Beitrag anzeigen

Jack and the Juice

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

Sortieren nach zwei Spalten

  Alt 15. Jan 2011, 16: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