![]() |
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 |
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ß |
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:
Für weitere Hilfe wäre ich dankbar.
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; MfG, Ronny |
Re: DBGrid Spalten Sortieren
Ich glaube so ist es einfacher.
Delphi-Quellcode:
Du brauchst keine verschachtelten If-Clauses wenn du sowieso nur nach "DBGrid1.Columns[pred( DBGrid1.Col )].Fieldname" sortierst.
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; Mit dem Datensalat kann ich dir nicht weiterhelfen, hab' noch nie TTable benutzt. |
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 |
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:
wird zu
10 ABC
20 XXX 30 YYY
Code:
Der 1. Fall kann passieren wenn z.B.: ein String-Feld sortiert wird (3 ist dann größer als 200!)
30 XXX
20 YYY 10 ABC 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 11:00 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