Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBGrid mit Explorer-Such-Funktion (https://www.delphipraxis.net/146501-dbgrid-mit-explorer-such-funktion.html)

Ines 21. Jan 2010 09:15


DBGrid mit Explorer-Such-Funktion
 
Hallo DP'ler!

Ich habe in meinem Programm ein DBGrid. Da das DBGrid größer als eine Bildschirmseite ist, möchte ich gerne so etwas ähnliches "basteln" wie beim Windows-Explorer. Klickt man auf einen entsprechenden Buchstaben, dann springt der Cursor zur 1. Datei, die mit diesem Buchstaben beginnt.

Könnt Ihr mir helfen? Ist das mit Delphi zu realisieren? :gruebel:

Vielen Dank für Eure Hilfe
Ines


Delphi2009 und Win XP

nahpets 21. Jan 2010 10:09

Re: DBGrid mit Explorer-Such-Funktion
 
Hallo,

habe mal etwas in der Art gebastelt:

Über das DBGrid habe ich eine Zeile mit TEdits gemacht, deren Breite sich an die Breite des DBGrids anpassten (OnResize).

Dadurch war die "Zugehörigkeit" der Edits zu den Spalten im Grid erkennbar.

Nun konnten die Anwender in die Edits was eingeben. Alle Edits hatten ein OnChange-Ereignis (also ein Ereignis für alle Edits). In diesem Ereignis habe ich den Namen des Senders abgefragt. Die Namen hatten eine Namenskonvention: ed + Spaltenname. Dadurch konnte ich im Ereignis den "Spaltennamen" abgreifen und einen Filter auf das Dataset anwenden, der nur die Sätze entsprechend der Eingabe anzeigte. Also: Die Eingabe von z. B. "A" führte dazu, dass nur noch Sätze zu sehen waren, die mit "A" beginnen. Jeder weitere Buchstabe schränkte die angezeigte Datenmenge weiter ein.

Statt eines Filters könntest Du aber auch mit Locate zum ersten, passenden Datensatz gehen, so dass nur der Datenbankcursor verschoben wird und nicht die angezeigte Datenmenge eingeschränkt wird. Sofern das DBGrid readonly ist, könntest Du auch das OnKeyPress-Ereignis für die Änderung des Datenbankcursors heranziehen. Ein Locate auf den soeben eingegeben Buchstaben.

Ist das DBGrid nicht readonly, besteht die Gefahr der ungewollten Datenänderung.

Eventuell sind FindFirst o. ä. Methoden für die Suche angebrachter, hier müsstest Du mal ausprobieren, welche Methode für Deine Situation die besten und schnellsten Ergebnisse liefert. Ein Filter auf große Datenmengen könnte schon zu erheblichen Laufzeiten führen. Da wäre ein FindFirst eventuell sinnvoller.

Bei der Variante mit den Edits bitte einen zusätzlichen Button zum Leeren aller Edits nicht vergessen, die Anwender werden er Dir danken.

Bei den Edits hast Du mehrere Möglichkeiten:

Die inhaltliche Änderung eines Edits leer alle übrigen Edits

oder

die Eingaben in den Edits werden beim Filtern kombiniert.

Für Adresssuchen kann die zweite Variante durchaus hilfreich sein. Man gebe ein bisserl vom Name ein bisserl vom Ort... ein...

Ines 21. Jan 2010 11:30

Re: DBGrid mit Explorer-Such-Funktion
 
Hallo Stephan,

ich habe folgende Lösung in mein Programm eingebaut: OnKeyPress und Locate.
Mein DBGrid ist readonly und nur ein Feld (Familienname) ist für die Suche relevant.

Vielen Dank für Deine schnelle, tolle Hilfe. :-D

Mit freundlichen Grüßen
Ines


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