Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - StringGrid nach Zahlen sortieren..


Terra23 - So 06.07.03 15:35
Titel: StringGrid nach Zahlen sortieren..
Hallo ihr.

Ich brauche für mein Programm einige Anregungen, wie ich folgendes realisieren kann:

Es geht um ein StringGrid, welches 3 Spalten beinhaltet (Punkte, Vorname, Name). Nun will ich nach Punkten sortieren und gleichzeitig die dazugehörigen Zellen der anderen Spalten beibehalten (es geht um eine Punktetabelle für ein Toto-Tool). Ich weiß, daß ich einen Algorithmus nehmen muß, nur leider habe ich damit noch nie gearbeitet und steige auch durch das, was ich bisher gefunden habe, nicht sonderlich durch. Daher bin ich irgendwie mal wieder auf eure Hilfe angewiesen. ;-) Ich verlange nicht den kompletten Code und bin auch lernfähig; einige Ansätze wären schon sehr hilfreich. :-)


Moritz M. - So 06.07.03 15:57

Das ganze geht mit CustomSortProc, und wie du das machst findest di mal wieder im schönen SwissDelphiCenter:
http://swissdelphicenter.ch/de/showcode.php?id=1103
Da geht es zwar um ListViews, dürfte aber Übertragbar sein.


Terra23 - Mo 07.07.03 13:34

Danke für den Hinweis. Leider ist diese Möglichkeit ein wenig kompliziert zu sein und irgendwie auch nicht gerade glücklich. Kannst du mir vielleicht anderweitig behilflich sein?


grayfox - Mo 07.07.03 16:59

hallo terra!

versuch es mal mit 'insertion-sort':


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.sortieren1Click(Sender: TObject);
var
  key: TDateTime;
  i, j, aRow: integer;
  TempRows: TStrings;
begin
  TempRows:= TStringList.Create;
  for aRow:= 2 to ZugGrid.RowCount-1 do begin
    Label1.Caption:= 'SatzNr: ' + IntToStr(aRow);
    Label1.UpDate;
    key:= StrToDate(ZugGrid.Cells[3,aRow]);
    i:= aRow -1;
    while (i > 0and (StrToDate(ZugGrid.Cells[3,i]) > key) do begin
      for j:= 0 to ZugGrid.ColCount-1 do
        TempRows.Add(ZugGrid.Cells[j,i+1]);
      ZugGrid.Rows[i+1]:= ZugGrid.Rows[i];
      ZugGrid.Rows[i]:= TempRows;
      TempRows.Clear;
      dec(i);
    end;
  end;
  TempRows.Free;
end;


key ist der wert, nach dem das grid sortiert wird - in diesem fall nach einem datum. du brauchst es nur an deine bedürfnisse anzupassen.

mfg, stefan