【发布时间】:2014-06-10 14:07:35
【问题描述】:
我需要关于以下情况的建议。这些是我的设计设置:
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;
到上面的代码块。但是,这会干扰代码执行的正常流程,因为不仅更新了网格,而且还处理了其他消息,这是不可取的。所以这不是我正在寻找的解决方案。还有其他想法吗?
【问题讨论】:
-
YourGrid.DataSource.DataSet.Refresh不会有帮助吗? [只是猜测] -
您是否尝试通过调用循环周围的 cdsMonitor.DisableControls 和 cdsMonitor.EnableControls 来替换您的 Application.ProcessMessages?它不会显示中间更新,但应该明显比没有更新快。
-
@TLama,不,
Refresh不起作用。 -
@moskito-x 是的,我看到了,但直到现在我才有机会尝试。谢谢!这正是我想要的!
-
@Rick77 :很高兴知道它有效。谢谢 :-)