Registriert seit: 25. Mär 2004
108 Beiträge
|
TDBGrid - Datensatz springt bei Refresh / Vertik. Pos ändern
9. Jul 2008, 22:24
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
|