Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#2

Re: DBGrid mit Explorer-Such-Funktion

  Alt 21. Jan 2010, 11:09
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...
  Mit Zitat antworten Zitat