Scrolling issues when using DevExpress grid in grid mode

Hi,

I’m having issues with scrolling when using a DevExpress QuantumGrid bound to a TDAMemDataTable with GridMode = True.

Specifically, when I scroll using the mouse, I’m seeing very odd effects where a couple of records will change instantly and repeated as I scroll but the rest of the grid won’t update until I stop scrolling.

Also scrolling in general seems very ‘jerky’.

DX are suggesting this might be due to the underlying components and to see if it happens with standard Delphi ones but obviously that’s easier said than done.

I just wanted to know if there were any known issues in this area or settings I can tweak to aid this? As it is the functionality with grid mode enabled is borderline unusable.

Hi,

nobody had reported about any problems of TDAMemDataTable with std controls like TDBGrid, so your issue can be a result of some optimization or improvement of DX components that can catch and process some DB events by itself

Hi there,

GrideMode is a tricky beast. It is meant to be used with direct to database components, they use certain pre-fetching techniques in order to handle large amounts of data. So starting with the fact that DA uses a proxy DADataset that connects to a TDAMemDataTable which at the same time might be using their own ways to get the data into it I’m certain you will experience some sort of synch issues.

Ill recommend to plug the quantum grid to a firedac or ado component dataset /TFDQUERY/TADOQUERY directly to a database and test it. If no issues, then you know they will not play well together.

Good luck!

Well it seems most of the problems I was having were of my own making, basically I was navigating the underlying TDAMemDataTable in response to certain grid events which were causing chaos.

I think I can make it work but the biggest problem with GridMode is that, in a multi-select grid, you only have access to an array of bookmarks for selected records.

What I need is a way of retrieving data from the underlying table, without moving the current record. The problem is all I have is a bookmark and I can’t find any way of determining the record id or index from this.

There’s actually a TDAMemoryDataset.IntFindRecordID function which does exactly what I need but isn’t exposed. Is there any way I can achieve this from my own code?

Hi,

Have you tried to use the CloneSource feature? in this mode, master and all cloned tables use the same recordset but can have own selected record, sorting, filters, etc and can be used as master/details tables.

We have the ClonedSource sample that demonstrates this.

1 Like

I did think about that but would the clone have identical bookmarks, i.e. would a bookmark from one dataset be valid in the other?

Yes, it will because the same record set is used