Hallo,
ich möchte mit onTitleClick in einem DBGrid nach der Spalte sortieren.
Gleichzeitig soll aber auch ColumnMove und ColumnResize möglich sein.
Wie löst man das auf?
Das Sort selber ist nicht das Problem, nur die Funktionen move, resize, sort zu unterscheiden bereitet Kopfschmerzen.
Jemand dafür eine Lösung?
DBGrid onTitleClick
-
- Lazarusforum e. V.
- Beiträge: 280
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: DBGrid onTitleClick
ähem, ich versteh das Problem nicht...
Im OnTitleClick findet die Sortierung statt.
Davon ist das Move oder/und Resize doch nicht betroffen.
Im OnTitleClick findet die Sortierung statt.
Davon ist das Move oder/und Resize doch nicht betroffen.
just my two Beer
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: DBGrid onTitleClick
Du brauchst nicht um die Sortierung zu kümmern, das macht das Datenbankprogramm (FireBird, Sqlite, MariaDB ...).
Und die TDBGrid enthält keine Daten, es zeigt es nur an. Schau das Ereignis OnTitleClick an:
Das ist vereinfachter Code. Mann kann Sortierfelder in einer Variable speichern und nach viele Spalten sortieren, z.B. mit Shitf-Taste und Mausklick oder Sortierreihenfolge(ASC/DESC) ändern. Ich mache es immer so ähnlich.
Wenn du ZEOS-Komponenten verwendest musst du nicht die gleichen Daten wieder vom DB-Server holen. Du kannst TZQuery/TZReadOnlyQuery.SortedFields-Eigenschaft benutzen. Es ist ziemlich schnell. Nur wenn du die Daten vom DB-Server neu holst dann, musst du SortedFields leeren und es dir von DB-Server sortieren lassen, die sind schneller. Vielleicht gibt es so etwas bei SQLDB.
Viel Spaß.
Und die TDBGrid enthält keine Daten, es zeigt es nur an. Schau das Ereignis OnTitleClick an:
Code: Alles auswählen
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
// Column.Field.Name ist das Feld nach dem sortiert werden soll
// nehmen wir an du hast eine Query dann kannst du jetzt so sortieren:
SQLQuery1.SQL.Text:=' select * from meine_tabelle order by '+Column.Field.Name;
// Du kannst auch mit Colum.Title.ImageIndex ein Bild anzeigen lassen, damit macht sieht, dass es nach dieser Spalte sortiert wird.
end;
Wenn du ZEOS-Komponenten verwendest musst du nicht die gleichen Daten wieder vom DB-Server holen. Du kannst TZQuery/TZReadOnlyQuery.SortedFields-Eigenschaft benutzen. Es ist ziemlich schnell. Nur wenn du die Daten vom DB-Server neu holst dann, musst du SortedFields leeren und es dir von DB-Server sortieren lassen, die sind schneller. Vielleicht gibt es so etwas bei SQLDB.
Viel Spaß.