Delphi 如何防止DevExpress TcxGrid/TcxDBDataController在简单post后完全重新加载数据?

Delphi 如何防止DevExpress TcxGrid/TcxDBDataController在简单post后完全重新加载数据?,delphi,devexpress,tclientdataset,tcxgrid,Delphi,Devexpress,Tclientdataset,Tcxgrid,我在Delphi 2009应用程序中使用DevXPress TcxGrid(没错,有100年历史的IDE),我有以下调用堆栈(来自madExcept): cxButton2Click只调用底层数据集上的Post,您可以看到,这个简单的Post启动了一系列事件,导致数据的完全重新加载,从而导致多个余弦事件 为什么会这样?Post只保存网格当前记录/单元格中已经存在的所有数据,因此,即使是单个记录也无需重新加载。但TcxDBDataProvider会重新加载整个数据集,为什么会这样,以及如何防止?这

我在Delphi 2009应用程序中使用DevXPress TcxGrid(没错,有100年历史的IDE),我有以下调用堆栈(来自madExcept):

cxButton2Click只调用底层数据集上的Post,您可以看到,这个简单的Post启动了一系列事件,导致数据的完全重新加载,从而导致多个余弦事件


为什么会这样?Post只保存网格当前记录/单元格中已经存在的所有数据,因此,即使是单个记录也无需重新加载。但TcxDBDataProvider会重新加载整个数据集,为什么会这样,以及如何防止?这是TcxGrid的标准行为吗?为什么这么奇怪

如果满足某些条件,可以使用SmartRefresh

   cxGrid1DBTableView1.DataController.DataModeController.SmartRefresh := true;
请确保阅读帮助,因为其中有一些限制,例如:

注意:如果数据控制器处于智能刷新模式且数据集 记录通过数据控制器进行管理,记录 自动更新。如果数据集记录是通过 数据集的方法或通过外部控件,您需要手动调用 UpdateItems方法使用新数据重新加载所有记录

这意味着您需要使用DataController.*而不是TDataSet.*方法

// Use DataController methods   
cxGrid1DBTableView1.DataController.Post();
// Instead of TDataSet methods
FDTable1.Post;

Devex Support对此有何评论?他们应该是第一个提出问题的人。cxGrid相当复杂-如果您打算使用它创建或维护代码,那么花一些时间学习组件将比在处理部分应用程序/代码库时尝试解决问题更有效。他们也有很好的支持,新版本的性能有所提高,因此获得当前订阅可能也会有所帮助。
SmartRefresh
是您需要的。
// Use DataController methods   
cxGrid1DBTableView1.DataController.Post();
// Instead of TDataSet methods
FDTable1.Post;