Я использую DevExpress TcxGrid в приложении Delphi 2009 (правильно, IDE 100-летней давности), и у меня есть следующий стек вызовов (из madExcept):
SplendidSoft.exe SplendidDMU 1051 +3 TSplendidDM.ImportedDataCSAfterScroll
SplendidSoft.exe DB TDataSet.DoAfterScroll
SplendidSoft.exe DB TDataSet.First
SplendidSoft.exe cxDBData 2056 +21 TcxDBDataProvider.First
SplendidSoft.exe cxCustomData 7638 +17 LoadData
SplendidSoft.exe cxCustomData 7689 +6 TcxCustomDataController.LoadStorage
SplendidSoft.exe cxDBData 4943 +3 TcxDBDataController.LoadStorage
SplendidSoft.exe cxCustomData 7893 +20 TcxCustomDataController.UpdateStorage
SplendidSoft.exe cxCustomData 7991 +16 TcxCustomDataController.DataChanged
SplendidSoft.exe cxCustomData 11107 +2 TcxCustomDataProvider.DataChanged
SplendidSoft.exe cxDBData 1459 +53 TcxDBDataLink.DataSetChanged
SplendidSoft.exe DB TDataLink.DataEvent
SplendidSoft.exe cxDBData 1399 +1 TcxDBDataLink.DataEvent
SplendidSoft.exe DB TDataSource.NotifyLinkTypes
SplendidSoft.exe DB TDataSource.NotifyDataLinks
SplendidSoft.exe DB TDataSource.DataEvent
SplendidSoft.exe DB TDataSet.DataEvent
SplendidSoft.exe DBClient TCustomClientDataSet.DataEvent
SplendidSoft.exe DB TDataSet.Resync
SplendidSoft.exe DB TDataSet.Post
SplendidSoft.exe DBClient TCustomClientDataSet.Post
SplendidSoft.exe DB TDataSet.CheckBrowseMode
SplendidSoft.exe SplendidFormU 295 +4 TSplendidForm.cxButton2Click
cxButton2Click просто вызывает Post для базового набора данных, и можно видеть, что это простое сообщение инициировало цепочку событий, которая приводит к полной перезагрузке данных и, следовательно, к множеству событий AfterScroll.
Почему это так? Post просто сохраняет все данные, которые уже есть в текущей записи/ячейках сетки, поэтому нет необходимости перезагружать даже одну запись. Но TcxDBDataProvider перезагружает весь набор данных, почему так и как этого избежать? Это стандартное поведение TcxGrid? И почему это так странно?
SmartRefresh
это то, что вы ищете. - person BrakNicku   schedule 26.08.2019