向 cxGrid 批量插入数据时提高刷新速度

一、View 的类型是 cxGridDBTableView

  1. cxGrid.DisableControls;
    cxGrid.EnableControls;
    (此处怀疑应为 View 后台连接的数据集的 DisableControls 方法和 EnableControls 方法)
    如仍觉得慢,可以把
    cxGrid1DBTableView --> DataController --> DataModeControllerGridMode
    设置为 True ,数据装入就会快速很多了,但分组就相对慢些。
    详细用法请查阅其联机文档资料。

2.set DataController->DetaillnSQLMode
(captions);

二、View 的类型是 cxGridTableView

默认情况下,每修改一个单元格的值时,cxGrid 都会执行一次刷新操作,从而导致插入速度下降。可以使用 DataControllerBeginUpdate 方法来禁止刷新,完成批量插入后使用 EndUpdate 方法恢复刷新。

需要注意的是:

  1. 调用 BeginUpdate 后,如果不调用 EndUpdate,表格将不再刷新显示,所以一定要使用 try...finally... 结构来保证 EndUpdate 被调用。
  2. DataControllerEndUpdate 中间,不可以调用以下方法:Append, Insert, Post, SetEditValue, FindRecordIndexByText
try
  cvAddOrder.DataController.BeginUpdate;
  for i := 7 to 150 do
        with cvAddOrder.DataController do
          begin
            iRecordIndex := InsertRecord(RecordCount);
            Values[iRecordIndex, clId.Index] := iRecordIndex + 1;
            Values[iRecordIndex, clCaption.Index] := ExcelApp.WorkSheets[1].Cells[i, 4].Value;
            Values[iRecordIndex, clPrice.Index] := ExcelApp.WorkSheets[1].Cells[i, 6].Value;
            Values[iRecordIndex, clNumber.Index] := ExcelApp.WorkSheets[1].Cells[i, 7].Value;
            Values[iRecordIndex, clTotal.Index] := ExcelApp.WorkSheets[1].Cells[i, 6].Value * ExcelApp.WorkSheets[1].Cells[i, 7].Value;
          end;
finally
  cvAddOrder.DataController.EndUpdate;
end;
posted @ 2024-08-21 08:14  汉学  阅读(39)  评论(0)    收藏  举报