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 Zwei Grids beim scrollen synchronisieren (https://www.delphipraxis.net/139962-zwei-grids-beim-scrollen-synchronisieren.html)

Mike_on_Tour 9. Sep 2009 07:51


Zwei Grids beim scrollen synchronisieren
 
Guten Morgen,

ich suche nach einer Lösung zur Synchronisation zweier Grids beim scrollen. Auf der Form gibt es ein DB-Grid (SMDBGrid) und ein StringGrid. Beide Grids liegen untereinander, haben 17 Spalten und passen nicht komplett in eine Form. Das StringGrid enthält die Summen der einzelnen Spalten bzw. andere spaltenabhängige Werte und hat keine sichtbaren Scrollbalken. Beim Scrollen des DB-Grids nach links und rechts muß auch das StringGrid entsprechend "verschoben" werden. Leider habe ich bisher keinen Ansatz gefunden, das Scrollen zu snychronisieren.

Über Tips und Tricks würde ich mich freuen.

Mike

hoika 9. Sep 2009 08:10

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo,

OnSelectCell müsste das Event sein, was du suchst.

Dann TopRow/LeftCol/Col/Row entsprechend setzen


#Update#

Ein DB-Grid ?
Dann musst du dich an das DataSource (OnDataChange) hängen,
liest den aktuellen Record aus (DataSet)
und setzt den Wert im StringGrid.


Heiko

Mike_on_Tour 9. Sep 2009 08:52

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo,

nach TopRow/LeftCol habe ich schon gesucht, aber ohne Erfolg. Das scheint im DB-Grid nicht public zu sein.

Das mit dem DataSource verstehe ich noch nicht ganz. Die Werte (Summen) im StringGrid sind schon komplett eingetragen. Ich möchte nur die horizontale Scrollposition des bzw. der Grids synchronisieren. Wie mache das bei DataSource.OnDataChange ?

Mike

rweinzierl 9. Sep 2009 09:26

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo

Schon mit einer Scrollbox probiert, da kannst du ja eine beliebige "virtuelle" Formulargröße definieren und diese übernimmt dann das Scrollen der Komponenten.

mfg

Reinhold

Mike_on_Tour 9. Sep 2009 09:33

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo,

die ScrollBox hat in meinen Überlegungen noch keine Rolle gespielt, ist aber ein guter Tip. Ich werde mir das mal anschauen. Danke.

Mike

hoika 9. Sep 2009 09:53

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo,

DataSource.OnDataChange wird aufgerufen,
wenn der Nutzer im DBGrid unterwegs ist.

Auf welchem Datensatz er steht,
sagt Dir das darunterliegende DataSource.DataSet.
Im StringGrid suchst du jetzt die entsprechende Zeile raus
(irgendwie musst du doch wissen, welcher Datensatz in welcher Zeile steht ?)
z.B. könntest du die eindeutige Id des Datensatzes (die es hoff. gibt)
unter Grid.Objects speichern.

Die Frage ist ja, soll in beide Richtungen synchronisiert werden.

DBGrid -> StringGrid: OndataSource

StringGrid -> DBGrid: im DataSet in Record suchen


Heiko

Mike_on_Tour 9. Sep 2009 10:32

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo Heiko,

das mit der DataSource ist mir klar. Das StringGrid enthält nur selbst berechnete Spaltensummen aus dem DB-Grid, davon allerdings vier Berechnungen pro Spalte (Summe, Zeitaufwand, Selbskosten, GuV). Das StringGrid enthält keine einzelnen Werte eines DB-Satzes. Ich will nur die Scrollposition der Grids nach links bzw. rechts synchronisieren, damit die Grid-Spalten untereinander stehen, da die volle Breite der Grids nicht auf die Form paßt. Das Scrollen durch die Datensätze erfolgt ausschließlich im DB-Grid.

Mike

hoika 9. Sep 2009 11:18

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo,

falls nicht geändert werden soll,
würde ich ein TClientDataSet verwenden,
und die 4 "Zeilen" zusätzlich mit reinpacken.

SelectedIndex bringt nichts ?


Heiko

Mike_on_Tour 9. Sep 2009 13:39

Re: Zwei Grids beim scrollen synchronisieren
 
Hallo,

den Einsatz einer ScrollBox habe ich nach einem kurzen Test wieder verworfen. Es können zwar die kompletten Grids gescrollt werden, aber die Zuordnung der Spalten und Zeilen im DB-Grid geht für den Anwender dadurch verloren. Das durch Programmierung wieder auszugleichen, erscheint mir zu aufwändig.

Ich habe mich nochmal mit dem SMDBGrid auseinander gesetzt. Dort gibt es ja schon die Möglichkeit, eine Fußzeile mit einem Wert für Summen oder Ähnliches anzuzeigen. Dazu sind nur ein paar Eigenschaften der Komponente zu setzen, ein paar Codezeilen zu schreiben und das SMDBGrid gibt die Fußzeile mit dem entsprechenden Wert aus. Wenn ich jetzt die Höhe der Fußzeile für vier Zeilen anpasse, muß ich nur noch mit eigenen Routinen die entsprechenden Werte ermitteln und vierzeilig in die Fußzeile eintragen. Ich habe zwar noch keine Ahnung ob und wie das geht, aber das ist dann sicher ein neuer Thread.

Mike


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