Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - DBGrid scrollen aber DB-Zeiger soll sich nicht verändern


saxe66 - Mi 04.04.12 11:28
Titel: DBGrid scrollen aber DB-Zeiger soll sich nicht verändern
Habe ein Problem mit dem Scrollen,

ich würde gern in einem DBGrid die Tabelle scrollen (auch mit der Maus), jedoch soll der Datenbankzeiger auf dem zuletzt gewählten Datensatz stehen bleiben.
Gibt es da eine Eigenschaft, die man setzen muss oder ist Handprogrammierung erforderlich ???

Danke im Voraus


zuma - Mi 04.04.12 12:45

Geht so weit ich weiss, nicht.
Das Grid ist per Datasource mit dem Dataset verbunden ?
Damit übernimmt der Adapter das steuern des Cursors in der Datenmenge.

Ich löse so etwas mit Clientdataset's (1) oder zusätzlichen Edit-feldern (2),
ist immer abhängig vom Anwendungsfall.

(1)
(eine Variante:
Query liest aus DB, die gelesenen Daten werden in ein Clientdataset geschaufelt,
das Clientdataset wird zur Anzeige genutzt. Die Änderungen werden dann
vom Clientdataset wieder in den Query übertragen, der dann letztlich wieder in die DB zurückschreibt).
Clientdatasets kann man auch Clonen, dadurch erhält man einen weiteren Cursor
auf die jeweilige Datenmenge.

(2)
im Editfeld wird sich der eindeutige Key eines Datensatzes gemerkt.
Dies geschieht nur durch eine extra-aktion, nicht durch das scrollen/bewegen in der Datenmenge.


bummi - Mi 04.04.12 12:54

Wenn Du per Ado arbeitest kann Du die Connection abhängen (Disconnected DataSet), ansonsten wie beschreiben eine Clone in ein Clientdataset erstellen.


zuma - Mi 04.04.12 13:06

Mann sollte aber schon den Unterschied zwischen duplizieren und Clonen beachten ;)


bummi - Mi 04.04.12 13:22

@zuma
ja, sorry ... Asche auf mein Haupt ...


Tranx - Mi 04.04.12 15:29

Ein Problem bei Deinem Fall ist auch: Was ist der zuletzt gewählte Datensatz? Wenn Du scrollst, veränderst Du den Zeiger. Das ist klar. Aber welchen Datensatz willst Du als letzt gewählten definieren, den, der vor dem Scrollen angezeigt wird, oder einen genau definierten, den Du selber auswählst. Dann könntest Du ja mit einer Taste (z.B. CTRL M für Markierung des letzten Datensatzes den Datensatz in einer Variablen oder in einem SpinEditfeld speichern, so dass Du diesen Datensatz dann wieder auswählen kannst. Am besten nimmst Du zur Speicherung den Primärschlüssel der Tabelle. Das sollte eine Ganzzahlvariable sein. Mit z.B. CTRL-G kannst Du dann diesen Datensatz wieder anwählen. Alles in der Keydown-Prozedur des DBGrid.