![]() |
Delphi 7 TDBGrid Scrollbar
Hallo zusammen,
ich verwende Delphi 7 und habe eine TDBGrid die als Datasource eine TDataSource und als DataSet eine TTable hat. Jetzt ist das problem, dass der Datensatz immer wieder mit neuen Daten gefüttert wird und, wenn man dabei in der TDBGrid scrollt, dann springt die Scrollbar immer wieder zu den neuen Datensätzen. Ich möchte, wenn man in der Grid runterscrollt und neue Datensätze kommen, die Scrollleiste an der Stelle bleiben soll. Kann einer mir dabei helfen? Mit freundlichen Grüßen Alex |
AW: Delphi 7 TDBGrid Scrollbar
Das liegt nicht am DBGrid.
Das DBGrid zeigt immer (meist etwa mittig) den aktuellen Datensatz der Datenquelle an. Wird bei 'ner TTable nun was an neuen Daten angefügt, so wandert der Datensatzzeiger von TTable auf den zuletzt eingefügten Datensatz. Die Anzeige im DBGrid wandert automatisch mit. Soll im DBGrid aber diese "Wanderung" nicht nachvollzogen werden, so muss man sich vor dem Einfügen neuer Datensätze den aktuellen Datensatz merken, die Daten einfügen und dann zum gemerkten Datensatz zurückkehren. Schau Dir bitte mal in der Delphi 7-Hilfe das Beispiel zu "GetBookmark, GotoBookmark, FreeBookmark, FindPrior, Value, OnDataChange, Bof (Beispiel)" an, eventuell kannst Du es entsprechend Deiner Bedürfnisse anpassen. Ungetestet eventuell sowas in der Art:
Delphi-Quellcode:
Aufruf im Programm:
procedure TForm1.DatenInTabelleUebernehmen(MyData : TTable);
var SavePlace: TBookmark; begin MyData.DisableControls; { Positionsmarke abrufen, damit wir zum selben Datensatz zurückkehren können } SavePlace := MyData.GetBookmark; try { Daten einfügen } MyData.Append; // Felder mit Inhalt belegen MyData.Post; { Zurück zu Positionsmarke wechseln. } MyData.GotoBookmark(SavePlace); { Wert zuweisen } { Positionsmarke freigeben } finally FreeBookmark(SavePlace); end; MyData.EnableControls; end;
Delphi-Quellcode:
DatenInTabelleUebernehmen(DeineTTableKomponente);
|
AW: Delphi 7 TDBGrid Scrollbar
Hat Alles wunderbar geklappt! Vielen Dank für die Lösung.
|
AW: Delphi 7 TDBGrid Scrollbar
Mir ist gerade aufgefallen, dass die vertikale Position wunderbar gespeichert wird, aber leider wird beim Verändern des Datensatzes immer noch die Scrollbar horizontal nach ganz links gesetzt. Das stört jetzt immer noch wenn man einen sehr "breiten" Datensatz offen hat und alles wegrutscht.
|
AW: Delphi 7 TDBGrid Scrollbar
Naja, dann die Routine halt noch ein bisserl (ungetestet) anpassen:
Delphi-Quellcode:
Damit sollte der Fokus zumindest wieder in dem Feld sein, in dem er vor der Aktuallisierung war. Es wird aber nicht zwingend die exakte Optik vom Zustand vor der Aktuallisierung wieder hergestellt sein.
procedure TForm1.DatenInTabelleUebernehmen(MyData : TTable);
var SavePlace: TBookmark; SaveField: TField; begin MyData.DisableControls; { Positionsmarke abrufen, damit wir zum selben Datensatz zurückkehren können } SavePlace := MyData.GetBookmark; { Focussiertes Feld merken } SaveField := DBGrid.SelectedField; try { Daten einfügen } MyData.Append; // Felder mit Inhalt belegen MyData.Post; { Zurück zu Positionsmarke wechseln. } MyData.GotoBookmark(SavePlace); { Zurück zu fokussierten Feld } DBGrid.SelectedField := SaveField; finally { Positionsmarke freigeben } FreeBookmark(SavePlace); end; MyData.EnableControls; end; Ansonsten schau Dir mal die Methode ScrollBy an. |
AW: Delphi 7 TDBGrid Scrollbar
Der Fehler mit dem horizontalen Scrollen lag an dgRowSelect := True. Mit der Einstellung wird die horizontale Scrollbar bei jeder Interaktion nach ganz links versetzt. z.B. wenn man vertikal scrollt oder wenn man in die DBGrid klickt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz