AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TDBGrid - Datensatz springt bei Refresh / Vertik. Pos ändern
Thema durchsuchen
Ansicht
Themen-Optionen

TDBGrid - Datensatz springt bei Refresh / Vertik. Pos ändern

Ein Thema von DocE · begonnen am 9. Jul 2008 · letzter Beitrag vom 10. Jul 2008
Antwort Antwort
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#1

TDBGrid - Datensatz springt bei Refresh / Vertik. Pos ändern

  Alt 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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än

  Alt 9. Jul 2008, 22:58
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.
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#3

Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än

  Alt 10. Jul 2008, 00:00
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...
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än

  Alt 10. Jul 2008, 00:10
Ich habe geschrieben wie es geht. Wenn du das nichtmal ausprobieren willst, dann ist das dein Problem.
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#5

Re: TDBGrid - Datensatz springt bei Refresh / Vertik. Pos än

  Alt 10. Jul 2008, 00:18
o_O



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?
  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 22:40 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