Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DBGrid sortieren bei Titel-Klick (https://www.delphipraxis.net/130165-dbgrid-sortieren-bei-titel-klick.html)

ickehausen 4. Mär 2009 11:00


DBGrid sortieren bei Titel-Klick
 
Ich würde gern mein Grid bei eimem Klick auf die Spalte der Titelzeile entsprechend sortieren lassen. Leider gibt es ja beim Grid nur dass Ereignis OnClickTitle. Bei dem Ereignis ist es ja egal auf welche Spate ich Klick. Ich kann also nicht entscheiden, sortiere ich nach Spalte A oder nach Spalte B oder nach Spalte C. Kann mir wer weiterhelfen?

DeddyH 4. Mär 2009 11:02

Re: DBGrid sortieren bei Titel-Klick
 
Delphi-Quellcode:
Type
  TDBGridClickEvent = procedure (Column: TColumn) of object;
In Column steht doch die Spalte.

RWarnecke 4. Mär 2009 11:17

Re: DBGrid sortieren bei Titel-Klick
 
Hast Du schon nach Hier im Forum suchendbgrid sortieren gesucht. Da bekommst Du reichlich Beispiele wie Du die Spalten in einem DBGrid sortieren kannst.

ickehausen 4. Mär 2009 11:24

Re: DBGrid sortieren bei Titel-Klick
 
Danke für die schnelle Hilfe. Ich habe unter Grid sotieren gesucht und nichts passendes gefunden.

stho 23. Sep 2009 07:57

Re: DBGrid sortieren bei Titel-Klick
 
Und da ich hier drauf sogar eine passende antwort habe:

Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  if ADODataSet1.Active then
  begin
    ADODataSet1.Close;
  end;

  if column.title.caption = 'Nr.' then
  begin
    if not SortierID then
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY ID ASC';
      SortierID := True;
    end
    else
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY ID DESC';
      SortierID := False;
    end;
  end
  else if Column.Title.Caption = 'Datum' then
  begin
    if not SortierDatum then
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Datum, Zweck, Preis ASC';
      SortierDatum := True;
    end
    else
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Datum DESC, Zweck DESC, Preis DESC';
      SortierDatum := False;
    end;
  end
  else if Column.Title.Caption = 'Betrag' then
  begin
    if not SortierPreis then
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Preis ASC';
      SortierPreis := True;
    end
    else
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Preis DESC';
      SortierPreis := False;
    end;
  end
  else if Column.Title.Caption = 'Zweck' then
  begin
    if not SortierZweck then
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Zweck, Datum, Preis';
      SortierZweck := True;
    end
    else
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Zweck DESC, Datum DESC, Preis DESC';
      SortierZweck := False;
    end;
  end
  else if Column.Title.Caption = 'Kommentar' then
  begin
    if not SortierKommentar then
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Kommentar ASC';
      SortierKommentar := True;
    end
    else
    begin
      ADODataSet1.CommandText := 'SELECT * from Finanzen ORDER BY Kommentar DESC';
      SortierKommentar := False;
    end;
  end
  else
  begin
    ADODataSet1.CommandText := 'Select * from Finanzen';
    ADODataSet1.open;
    exit;
  end;
  ADODataSet1.open;
end;
P.S.
SortierKommentar, Sortier... das sind globale Variablen die zu beginn des Programms als False definiert wurden :zwinker:
Finanzen, so heißt meine Tabelle.

zwar nen bissel umständlich und aufwendig programmiert, aber dafür Anfängertauglich ^^

joachimd 23. Sep 2009 09:06

Re: DBGrid sortieren bei Titel-Klick
 
Zitat:

Zitat von stho
Und da ich hier drauf sogar eine passende antwort habe:

Delphi-Quellcode:
// viel zuviel code
...
zwar nen bissel umständlich und aufwendig programmiert, aber dafür Anfängertauglich ^^

Vieeeeeel zu aufwändig und nicht allgemein nutzbar;)

Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  SQL: string;
begin
  SQL:='SELECT * FROM [mytable] ORDER BY ['+Column.Field.FieldName+']';
  // ...
end;

BackOrifice 23. Sep 2009 09:15

Re: DBGrid sortieren bei Titel-Klick
 
Aber mit der Möglichkeit, auf- und absteigend zu sortieren. Das hat dein Code nicht ;)

Ich hab mir damals ne Funktion zum SQL-Query-String-Zusammenbasteln gebaut.

joachimd 23. Sep 2009 09:34

Re: DBGrid sortieren bei Titel-Klick
 
Zitat:

Zitat von BackOrifice
Aber mit der Möglichkeit, auf- und absteigend zu sortieren. Das hat dein Code nicht ;)

Ich hab mir damals ne Funktion zum SQL-Query-String-Zusammenbasteln gebaut.

Kindereien;)
Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  SQL: string;
begin
  SQL:='SELECT * FROM [mytable] ORDER BY ['+Column.Field.FieldName+']';
  if (oldcolumn=Column) then SQL:=SQL+' DESC';
  oldcolumn:=column;
  // ...
end;

DeddyH 23. Sep 2009 09:54

Re: DBGrid sortieren bei Titel-Klick
 
Bisschen kürzer:
Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
const Orders: array[Boolean] of string = ('',' DESC');
var
  SQL: string;
begin
  SQL:=Format('SELECT * FROM [mytable] ORDER BY [%s]%s',[Column.Field.FieldName,Orders[oldcolumn=Column]]);
  oldcolumn:=column;
  // ...
end;
Wobei ein "Umschalten" so wohl auch nicht ginge, da müsste man sich den alten Zustand merken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 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