Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在代码执行期间刷新DBGrid_Delphi_Delphi 5 - Fatal编程技术网

Delphi 在代码执行期间刷新DBGrid

Delphi 在代码执行期间刷新DBGrid,delphi,delphi-5,Delphi,Delphi 5,我需要关于以下情况的建议。以下是我的设计设置: object cdsMonitor: TClientDataSet Active = True … object cdsMonitorSendReceive: TBooleanField FieldName = 'SendReceive' end object cdsMonitorMessage: TStringField FieldName = 'Message' end object cdsMonit

我需要关于以下情况的建议。以下是我的设计设置:

object cdsMonitor: TClientDataSet
  Active = True
  …
  object cdsMonitorSendReceive: TBooleanField
    FieldName = 'SendReceive'
  end
  object cdsMonitorMessage: TStringField
    FieldName = 'Message'
  end
  object cdsMonitorTime: TTimeField
    FieldName = 'Time'
  end
end

object dsMonitor: TDataSource
  DataSet = cdsMonitor
  …
end

object dbgMonitor: TDBGrid
  …  
  DataSource = dsMonitor
  …
end
我正在使用以下代码向数据集添加数据:

cdsMonitor.Append;
cdsMonitorSendReceive.Value := False;
cdsMonitorMessage.Value := Bytes;
cdsMonitorTime.Value := Now;
cdsMonitor.Post;
在应用程序源代码中,有一个函数(在循环中)多次执行上述代码块。问题是,我没有看到附加的行一个接一个地出现,但有几秒钟我没有看到任何东西(函数很耗时),然后所有附加的行同时出现。我不仅希望在代码执行完成时看到结果,还希望在每个附加行之后刷新DBGrid,以便实时观察进度。我可以通过添加

Application.ProcessMessages;

到上面的代码块。但是,这会干扰正常的代码执行流程,因为不仅网格会更新,而且其他消息也会被处理,这是不可取的。所以这不是我想要的解决方案。还有其他想法吗?

您可以执行
dbgMonitor.Repaint

cdsMonitor.Append;
cdsMonitorSendReceive.Value := False;
cdsMonitorMessage.Value := Bytes;
cdsMonitorTime.Value := Now;
cdsMonitor.Post;
dbgMonitor.Repaint;

这将实现您想要实现的功能

YourGrid.DataSource.DataSet.Refresh
不会有帮助吗?[只是猜测]您是否尝试过通过调用循环周围的cdsMonitor.DisableControls和cdsMonitor.EnableControls来替换Application.ProcessMessages?它不会显示中间更新,但应该比没有中间更新快得多。@TLama,不,
Refresh
不起作用。@moskito-x是的,我看到了,但直到现在才有机会尝试它。谢谢这正是我要找的@瑞克77:很高兴知道它有用。Thx:-)