AGB  ·  Datenschutz  ·  Impressum  







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

Zwei Grids beim scrollen synchronisieren

Ein Thema von Mike_on_Tour · begonnen am 9. Sep 2009 · letzter Beitrag vom 9. Sep 2009
Antwort Antwort
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 07:51
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
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 08:10
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
Heiko
  Mit Zitat antworten Zitat
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 08:52
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
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  Mit Zitat antworten Zitat
Benutzerbild von rweinzierl
rweinzierl

Registriert seit: 22. Mär 2005
98 Beiträge
 
#4

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 09:26
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
  Mit Zitat antworten Zitat
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 09:33
Hallo,

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

Mike
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 09:53
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
Heiko
  Mit Zitat antworten Zitat
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 10:32
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
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 11:18
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
Heiko
  Mit Zitat antworten Zitat
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Zwei Grids beim scrollen synchronisieren

  Alt 9. Sep 2009, 13:39
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
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  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 15:23 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