Odświeżanie grida przy skrolowaniu

0

Witam
Mam grida (TDBGrid) połączonego z bazą danych. Przy skrolowaniu poprzez "uchwycenie" wskaźnika na pionowym scrollbar i przesuwaniu dół/góra zawartość grida nie zmienia się. Dopiero po zakończonym przesuwaniu grid się odświeża i pokazuje poprawną zawartość.
Czy można tak ustawić własności grid'a aby przy takim skrolowaniu zawartość była od razu odświeżana?

(Lazarus 2.2.4, FPC 3.2.2)

Pozdrawiam
Sc0li0sis

1

To nie do końca tak działa ... grid sam w sobie nie przechowuje danych to jest tylko graficzna interpretacja danych w TDataSet połączone za pomocą TDataSource. W momencie query.open komponenty bazodanowe (w znacznej większości) np TFDQuery pobierają tylko pewną ilość rekordów aby odrysować n pierwszych rekordów na grid (metoda fetch). Przeciągając scrollbara zmuszasz Query do "dociągnięcia" pozostałych rekordów i odrysowanie ich na grid. Jeżeli chcesz mieć od razu wszystkie to musisz przestawić na swoim komponencie metodę FetchAll aby z default komponent pobrał całego dataseta z bazy. W takiej wersji scrolowanie po gridzie powinno być płynniejsze.

0

Nie sprawdziłem ale po mojemu zadziała myk opisany w przed ostatnim poście zresztą pytający potwierdza ale nie wiem co się stanie przy sporej ilości rekordów myślę że może zamulać.
https://en.delphipraxis.net/topic/5557-how-to-have-live-vertical-scrolling-of-tdbgrid/
Oczywiście w Lazarus trzeba trochę zmienić prawdopodobnie min. nie ma modułu Vcl.DBGrids tylko zwyczajnie DBGrids.

0
kAzek napisał(a):

Nie sprawdziłem ale po mojemu zadziała myk opisany w przed ostatnim poście zresztą pytający potwierdza ale nie wiem co się stanie przy sporej ilości rekordów myślę że może zamulać.

To jest z gruntu parszywy pomysł, a winna jest ta linia:
If Not dataset.Active Or (dataset.RecordCount <= Self.RowCount - 1) Then

Co do zasady, aby mieć poprawną wartość w RecordCount najpierw trzeba pobrać wszystkie dane z serwera.
A to słabo.
Jasne, można to zrobić lepiej, ale sporo zależy od używanych komponentów bazodanowych.
W FireDAC jest (ale ma ograniczenia i to poważne) łatwiej, ponieważ istnieje tryb Live Data Window.
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Browsing_Tables_(FireDAC)

Generalnie to dość skomplikowany temat, jeśli ma to działać z dowolnym zapytaniem SQL.
Po prostu trzeba zaimplementować stronicowanie danych, a to z kolei w połączeniu z komponentami db aware co do zasady nie jest proste.

1

Znalezłem!
Wystarczy ustawić właściwość dgThumbTrackiung na TRUE i jest
S.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.