![]() |
TDBGrid - Datensatz springt bei Refresh / Vertik. Pos ändern
Hallo zusammen!
Komme mit dem Problem nicht so richtig weiter, vielleicht wisst ihr Rat... Wenn ich auf eine mit einem TDBGrid verknüpfte Datenmenge ein Refresh/Requery ausführe bin ich wieder am Anfang der Datenmenge, das ist soweit klar. Also muss man vorher ein Bookmark setzen oder nachher über die ID den aktuellen Datensatz wieder locaten. Soweit so gut. Das Problem ist jetzt, das die (vertikale) Position des Datensatzes im Grid nicht mit der vorherigen übereinstimmt. Bei Bookmark wird über Resync([rmCenter]) der Datensatz in der Mitte des Grids positioniert, bei Locate landet er logischerweise ganz unten. Wie kann ich die vorherige Position wiederherstellen? Also so, dass der Datensatz im Grid nicht "springt". Das ist irritierend und man vertut sich leicht. Habe schon daran gedacht mit SendMessage(DBGrid.Handle, WM_VSCROLL, SB_LINEDOWN, 0); solange zu scrollen bis man wieder an der Stelle ist, danach relocaten oder mit WM_KEYDOWN - VK_UP wieder hoch zum Datensatz... (Ich weiß, ziemlich bescheidener Workaround, aber was will man machen?!) Aber selbst dazu müßte man irgendeinen Referenzwert haben. z.B. Welcher ist der erste sichtbare Datensatz im Grid, da würde die RecordNo der DataSet reichen. Aber wie bekommt man die raus? Die Info welche Pos die Scrollbar hat (GetScrollInfo) reicht hier nicht aus, da sich diese wiederum nur auf die Record-No bezieht, aber nichts über die tatsächliche vertikale Position des DS im Grid aussagt.. Ein SetScrollInfo versagt sowieso vollständig, deshalb obiger Workaround. Vielleicht hat jemand noch eine Lösung oder eine bessere Idee. Bereits jetzt vielen Dank! Grüße Doc |
Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än
Du hast leider nicht geschrieben mit welchen Datenbankkomponenten du arbeitest.
Also ganz allgemein arbeite mit... DataSet->DataSetProvider->ClientDataSet->DataSource->DBGrid wenn du da dann ein Refresh ausführst (auf dem ClientDataSet), verändert sich der Datensatzzeiger nicht. Dies gilt im speziellen für dbExpress. Wenn du eine andere Zugriffsmethode wählst sollte das aber identisch sein. |
Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än
Arbeite mit einer SQL-Query und einer DataSource. DataSetProvider und ClientDataSet verwende ich nicht.
Das Requery ist praktisch so, als würde die SQL-Abfrage vollständig neu ausgeführt bzw. wird sie auch. Um die Frage einfacher zu formulieren: Wie stelle ich den ersten sichtbaren Datensatz (egal was: RecordNo, DS-Feld) in einem TDBGrid fest? oder Wie stelle ich fest, in welcher sichtbaren Zeile eines TDBGrids sich der markierte/aktuelle DS befindet? Das würde mir schon deutlich weiterhelfen. Rest wäre dann Workaround, aber hauptsache es funktioniert... |
Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än
Ich habe geschrieben wie es geht. Wenn du das nichtmal ausprobieren willst, dann ist das dein Problem.
|
Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än
o_O
:duck: Sorry, aber wollte Dich keinesfalls angreifen! Werde das ausprobieren, allerdings interessiert mich o.g. Fragestellung auch generell. Das muss doch irgendwie möglich sein, oder nicht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 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