AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alphabetisch sortieren

Ein Thema von Crazymodder · begonnen am 18. Feb 2007 · letzter Beitrag vom 18. Feb 2007
Antwort Antwort
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#1

Alphabetisch sortieren

  Alt 18. Feb 2007, 12:09
Hallo ale zusammen bräuchte mal wieder ne kleine Hilfe, da ich folgendes Problem habe. Ich habe ein StringGrid und möchte, diese inhalte alpahbetisch sortieren lassen. Sortiert werden soll nur die 1.Spalte ab der zweiten Zeile. Und dann soll ebend beim sortieren die ganze zeile verschoben werden also alle werte die da drinn sind. Ich hab noch mal ne kleine Verständnis Skizze gemacht.

http://img412.imageshack.us/img412/8...benanntyh3.png
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Alphabetisch sortieren

  Alt 18. Feb 2007, 12:29
Wo kommen die Daten denn her ? Wenn die Daten unsortiert sind, dann würde ich sie vor der Anzeige eben sortieren. Wie ? Schreibe sie in Datenbank und fertig. Jede Zeile ist ein Datensatz und jede Spalte ein Feld. Sortieren und Anzeigen wäre dann recht einfach : SELECT * FROM TABLE ORDER BY FELD. Wäre mit TDataSet schnell gemacht.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Alphabetisch sortieren

  Alt 18. Feb 2007, 12:34
Hallo,
das habe ich 1997 irgendwo in den Borland Newsgroups gefunden
Delphi-Quellcode:
Procedure SortStringgrid( Grid: TStringGrid; byColumn: LongInt;
                          ascending: Boolean );
  Procedure ExchangeGridRows( i, j: Integer );
  Var
    k: Integer;
  Begin
    With Grid Do
      For k:= 0 To ColCount-1 Do
        Cols[k].Exchange(i,j);
  End;

  procedure QuickSort(L, R: Integer);
  var
    I, J: Integer;
    P: String;
  begin
    repeat
      I := L;
      J := R;
      P := Grid.Cells[byColumn, (L + R) shr 1];
      repeat
        while CompareStr(Grid.Cells[byColumn, I], P) < 0 do Inc(I);
        while CompareStr(Grid.Cells[byColumn, J], P) > 0 do Dec(J);
        if I <= J then
        begin
          If I <> J Then
            ExchangeGridRows( I, J );
          Inc(I);
          Dec(J);
        end;
      until I > J;
      if L < J then QuickSort(L, J);
      L := I;
    until I >= R;
  end;
 Procedure InvertGrid;
   Var
     i, j: Integer;
   Begin
     i:= Grid.Fixedrows;
     j:= Grid.Rowcount-1;
     While i < j Do Begin
       ExchangeGridRows( I, J );
       Inc( i );
       Dec( j );
     End; { While }
   End;
Begin
  Screen.Cursor := crHourglass;
  Grid.Perform( WM_SETREDRAW, 0, 0 );
  try
    QuickSort( Grid.FixedRows, Grid.Rowcount-1 );
    If not ascending Then
      InvertGrid;
  finally
    Grid.Perform( WM_SETREDRAW, 1, 0 );
    Grid.Refresh;
    Screen.Cursor := crDefault;
  end;
End;

Procedure SortStringGridByFloatCol( Grid: TStringGrid; byColumn: LongInt;
                                   ascending: Boolean );
  Procedure ExchangeGridRows( i, j: Integer );
  Var
    k: Integer;
  Begin
    With Grid Do
      For k:= 0 To ColCount-1 Do
        Cols[k].Exchange(i,j);
  End;

  function DeleteChar(const aStr : String; aChar : Char) : String;
  begin
    Result:=aStr;
    While Pos(aChar,Result)>0 do
      System.Delete(Result,Pos(aChar,Result),1);
  end;

  procedure QuickSort(L, R: Integer);
  var
    I, J: Integer;
    P: String;
  begin
    repeat
      I := L;
      J := R;
      P := Grid.Cells[byColumn, (L + R) shr 1];
      repeat
        while StrToFloat(DeleteChar(Grid.Cells[byColumn, I],'.')) < StrToFloat(DeleteChar(P,'.')) do Inc(I);
        while StrToFloat(DeleteChar(Grid.Cells[byColumn, J],'.')) > StrToFloat(DeleteChar(P,'.')) do Dec(J);
        if I <= J then
        begin
          If I <> J Then
            ExchangeGridRows( I, J );
          Inc(I);
          Dec(J);
        end;
      until I > J;
      if L < J then QuickSort(L, J);
      L := I;
    until I >= R;
  end;
 Procedure InvertGrid;
   Var
     i, j: Integer;
   Begin
     i:= Grid.Fixedrows;
     j:= Grid.Rowcount-1;
     While i < j Do Begin
       ExchangeGridRows( I, J );
       Inc( i );
       Dec( j );
     End; { While }
   End;
Begin
  Screen.Cursor := crHourglass;
  Grid.Perform( WM_SETREDRAW, 0, 0 );
  try
    QuickSort( Grid.FixedRows, Grid.Rowcount-1 );
    If not ascending Then
      InvertGrid;
  finally
    Grid.Perform( WM_SETREDRAW, 1, 0 );
    Grid.Refresh;
    Screen.Cursor := crDefault;
  end;
End;
I come from outer space to save the human race
  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 03:18 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