Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid Spalten Sortieren (https://www.delphipraxis.net/12957-dbgrid-spalten-sortieren.html)

Berserker 7. Dez 2003 18:44


DBGrid Spalten Sortieren
 
Hallo Delphi-Gemeinde.

Ich stehe mal wieder vor einem Problem für welches ich leider keine Lösung finde.

Ich habe eine MySQL Datenbank und lese Daten aus eine Tabelle aus.
diese habe ich an ein DataSource gebunden, welche die Daten ans DBGrid weitergibt.

im DBGrid werden 3 Spalten angezeigt (Kundennummer,Name,Vorname)

Jetzt möchte ich, das wenn man im DBGrid mit dem Cursor zwischen den Spalten wechselt, das er die aktive spalte jeweils aufsteigent sortiert. Dies habe ich auch hinbekommen, jedoch springt der cursor immer auf den 1. Datensatz ganz oben.

Gibt es eine möglichkeit das er Cursor immer auf dem aktuellen Datensatz stehen bleibt, welcher gerade ausgewählt ist?

Ich würde mich über Lösungs-Ansätze freuen.

MfG, Ronny

Leuselator 7. Dez 2003 19:00

Re: DBGrid Spalten Sortieren
 
schau mal in der OH unter "TDataSet.Bookmark", das ist eine an's Dataset gekoppelte Liste von Lesezeichen, die man nach dem Wechsel der Sortierung ansteuern kann - damit solltest Du sowas "basteln" können.
Gruß

Berserker 7. Dez 2003 20:08

Re: DBGrid Spalten Sortieren
 
Hallo.

Danke erstmal für diese Idee.

Sortieren tut er jetzt, jedoch wirt er irgendwie wie Daten durcheinander.

ich habe folgenden Code verwendet:

Delphi-Quellcode:
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
var cBook : TBookmark;
begin
 if(DBGrid1.Columns[DBGrid1.Col-1].Fieldname='nummer') then begin
  cBook := MyTable1.GetBookmark;
  MyTable1.OrderFields := 'nummer';
  MyTable1.GotoBookmark( cBook );
  MyTable1.FreeBookmark( cBook );
 end else if(DBGrid1.Columns[DBGrid1.Col-1].Fieldname='name1') then begin
  cBook := MyTable1.GetBookmark;
  MyTable1.OrderFields := 'name1';
  MyTable1.GotoBookmark( cBook );
  MyTable1.FreeBookmark( cBook );
 end else if(DBGrid1.Columns[DBGrid1.Col-1].Fieldname='vorname') then begin
  cBook := MyTable1.GetBookmark;
  MyTable1.OrderFields := 'vorname';
  MyTable1.GotoBookmark( cBook );
  MyTable1.FreeBookmark( cBook );
 end;
end;
Für weitere Hilfe wäre ich dankbar.

MfG, Ronny

Robert_G 7. Dez 2003 20:22

Re: DBGrid Spalten Sortieren
 
Ich glaube so ist es einfacher.

Delphi-Quellcode:
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
var
  cBook : TBookmark;
begin
  cBook := MyTable1.GetBookmark;
  MyTable1.OrderFields := DBGrid1.Columns[pred( DBGrid1.Col )].Fieldname;
  MyTable1.GotoBookmark( cBook );
  MyTable1.FreeBookmark( cBook );
end;
Du brauchst keine verschachtelten If-Clauses wenn du sowieso nur nach "DBGrid1.Columns[pred( DBGrid1.Col )].Fieldname" sortierst.

Mit dem Datensalat kann ich dir nicht weiterhelfen, hab' noch nie TTable benutzt.

Berserker 7. Dez 2003 21:05

Re: DBGrid Spalten Sortieren
 
Hi.

Ich habe mal deinen Code versucht.
Der macht jedoch das gleiche wie meiner und bringt kein anderes Ergebnis.

Er würfelt irgendwie die Zeilen durcheinander.

Naja ich versuche mal weiter. Evtl. finde ich ja noch eine Lösung.

Mfg, Ronny

Robert_G 7. Dez 2003 22:58

Re: DBGrid Spalten Sortieren
 
Es ist dein Code, ich wollte dir nur zeigen, dass es einfacher geht.

Wie werden die Einträge durcheinandergewürfelt?
1)Bleiben die Einträge intakt, nur die Sortierung entspricht nicht deinen Vorstellungen.
oder
2)werden die Spalten unabhängig voneinander sortiert.
z.B.:
Code:
10    ABC
20    XXX
30    YYY
wird zu
Code:
30    XXX
20    YYY
10    ABC
Der 1. Fall kann passieren wenn z.B.: ein String-Feld sortiert wird (3 ist dann größer als 200!)

Der 2. Fall wäre eine Art Super-GAU, aber wie gesagt - ich habe TTable noch nie benutzt.


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