AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid mit Explorer-Such-Funktion

Ein Thema von Ines · begonnen am 21. Jan 2010 · letzter Beitrag vom 21. Jan 2010
Antwort Antwort
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#1

DBGrid mit Explorer-Such-Funktion

  Alt 21. Jan 2010, 09:15
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?

Vielen Dank für Eure Hilfe
Ines


Delphi2009 und Win XP
Ines
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: DBGrid mit Explorer-Such-Funktion

  Alt 21. Jan 2010, 10: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
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#3

Re: DBGrid mit Explorer-Such-Funktion

  Alt 21. Jan 2010, 11:30
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.

Mit freundlichen Grüßen
Ines
Ines
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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