![]() |
StringGrid Sortieren
Hallo,
ich hoffe ihr könnt mir helfen. Ich habe ein StringGrid mit n Zeilen und 6 Reihen. In Reihe drei Sind Daten des Formats (TT.MM.JJJJ) eingetragen. Mein Ziel ist es das gesammte StringGrid entsprechend aufsteigend oder absteigend nach den Daten zu sortieren. Ich habe im Internet bereits eine Procedure gefunden und diese etwas abgeändert:
Delphi-Quellcode:
Damit wird Spalte 3 wunderbar nach Daten sortiert. Nur der Rest bleibt eben gleich. Wie mache ich nun weiter, dass nicht nur die 3. Spalte geändert wird, sondern auch die Daten der entsprechend anderen Reihen mit verschoben werden? :? Hoffe man kann mich verstehen und jemand hat einen Denkanstoß für mich.
procedure TForm1.Button9Click(Sender: TObject);
var i:Integer; tmpDatum: TDate; tmpString: String; j,m,t: Word; List: TSTringList; begin List := TStringList.Create; List.clear; for I := 1 to (Stringgrid2.RowCount-1) do begin if StringGrid2.Cells[2,i] = '' then break; tmpDatum := StrToDate(StringGrid2.Cells[2,i]); tmpString := FormatDateTime('YYYYMMdd',tmpDatum); List.Add(tmpString); end; {Das Leeren des Grids dient nur der Übersichtlichkeit, ansonsten können die Daten überschrieben werden.} for I := 1 to (Stringgrid2.RowCount) do StringGrid2.Cells[2,i] := ''; {Sortiere die Liste} List.sorted := true; {Zurückschreiben der Werte in das Stringgrid} for I := 1 to (List.Count) do begin j := StrToInt(copy(List.Strings[i-1],1,4)); m := StrToInt(copy(List.Strings[i-1],5,2)); t := StrToInt(copy(List.Strings[i-1],7,2)); tmpDatum := Encodedate(j,m,t); StringGrid2.Cells[2,i] := DateToStr(tmpDatum); Showmessage(ListNr.Text); end; end; MfG War10ck |
AW: StringGrid Sortieren
Ich würde eher ein DBGrid verwenden und ggf ein MemDataSet als Datenquelle verwenden
|
AW: StringGrid Sortieren
Ist eher schlecht, da ich dann das gesammte Programm umschreiben müsste. Gibt doch sicherlich eine etwas kompliziertere Möglichkeit, die dann letztendlich aber für mich schneller ist?
War10ck |
AW: StringGrid Sortieren
die Daten, die Du in dem Strringgrid anzeigst, sind doch wohl irgendwo noch gespeichert (tlist,TObjectlist...)
wie wäre es denn wenn Du die sortieren würdest? eine andere Möglichkeit wäre es den Inhalt einer Row als Object an den entsprechenden Datensatz in der Stringlist zu packen. Gruß K-H |
AW: StringGrid Sortieren
Zitat:
Zitat:
War10ck |
AW: StringGrid Sortieren
Hmmm... könnte man nicht die Rows in eine TObjectlist packen, diese sortieren und anschließend wieder ins StringGrid zurückschreiben? Allerdings erscheint mir das selbst etwas aufwändig.
|
AW: StringGrid Sortieren
Okay,
habs jetzt hinbekommen. War eigentlich gar nicht so schwer, vielleicht habt ihr mich aber auch nur falsch verstanden wer weiß?! Ich hab einfach den BubbleSortalgorythmus ein wenig auf mein Problem angepasst, mag vielleicht nicht die eleganteste Lösung sein aber funktioniert.
Delphi-Quellcode:
procedure Change(Row, I: Integer);
var Dummy: String; begin Dummy := Form1.StringGrid2.Cells[Row,I]; Form1.StringGrid2.Cells[Row,I] := Form1.StringGrid2.Cells[Row,I+1]; Form1.StringGrid2.Cells[Row,I+1] := Dummy; end;
Delphi-Quellcode:
Danke an alle die sich Mühe gegeben haben mir zu helfen! :)
procedure TForm1.Button11Click(Sender: TObject);
var Done: boolean; I, N: integer; begin N := StringGrid2.RowCount; repeat Done := true; for I := 1 to N - 2 do //I=1 => Überschrift auslassen if StrToDate(StringGrid2.Cells[2,I]) > StrToDate(Stringgrid2.Cells[2,I+1]) then begin Change(0, I); Change(1, I); Change(2, I); Change(3, I); Change(4, I); Change(5, I); Done := false; end; until Done; end; MfG War10ck |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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