![]() |
Re: StringGrid nach Kriterien sortieren
Zitat:
|
Re: StringGrid nach Kriterien sortieren
Die Spalten des Stringgrids sind TStrings. Das ist nicht weit von der TStringlist weg und die hat die Methode Sort. Genau das ist der Ansatz. Pseudocode :
Delphi-Quellcode:
Jetzt ist wohl das Hauptproblem, dass die Zeilen ja wohl zusammenbleiben müssen und dann nützt die sortierte Spalte alleine auch nichts ? Tja, dann wirds schon nicht mehr trivial. Viele kennen nicht mal die Objects-Eigenschaft. Mir fällt tatsächlich dafür aber nur die Objects-Eigenschaft ein. Du packst die Zellen jeder ZEILE mit AddObject in ein TObject (ähnlich wie record zu behandeln). Dieses muss an der Stringliste (AddObject von TStringList -> F1) dranpappen. Jetzt wird diese sortiert und das zu jedem Stringlist-Item gehörende Objekt (quasi die vorherige Zeile) ist mitsortiert !! Das Objekt muss dann nur wieder in das Stringgrid hinein. Du kapito ? :shock: Mann ist das einfach. :mrgreen: Ich muss gerade ein Stringgrid sortieren, bei dem das, was zusammengehört auf 1-5 Zeilen verteilt ist (in EINEM Stringgrid !). Da mache ich das ähnlich wegen der variablen Zeilen ist allerdings sogar TObjectList nötig. Bin schon 2 Wochen dran und immer noch nicht fertig damit. :shock:
MyStringList.Items := MyStringGrid.Cols [x];
MyStringList.Sort ..und wieder zurück ins Stringgrid |
Re: StringGrid nach Kriterien sortieren
Zitat:
MFG Subsidenz |
Re: StringGrid nach Kriterien sortieren
guckste hier:
![]() |
Re: StringGrid nach Kriterien sortieren
So nach langem Rumprobieren und Suchen hab ich es endlich geschafft.
Delphi-Quellcode:
Die Lösung ist eigentlich ganz einfach, nur muss man erst mal darauf kommen. :P
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const TheSeparator = '@'; var CountItem, I, J, K, ThePosition: integer; MyList: TStringList; MyString, TempString: string; begin CountItem := GenStrGrid.RowCount; MyList := TStringList.Create; MyList.Sorted := False; try begin for I := 1 to (CountItem - 1) do MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator + GenStrGrid.Rows[I].Text); Mylist.Sort; for K := 1 to Mylist.Count do begin MyString := MyList.Strings[(K - 1)]; ThePosition := Pos(TheSeparator, MyString); TempString := ''; TempString := Copy(MyString, (ThePosition + 1), Length(MyString)); MyList.Strings[(K - 1)] := ''; MyList.Strings[(K - 1)] := TempString; end; for J := 1 to (CountItem - 1) do GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)]; end; finally MyList.Free; end; end; procedure TForm1.exChange(Sender: TObject); begin SortStringGrid(grid, ex.ItemIndex) end; MFG Subsidenz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 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