2

我的应用程序中有许多“主/明细”表格。一个 TDBGrid,其中每一行显示项目的一些核心值。网格下方通常是一个“详细信息区域”,显示当前在网格中选择的项目的完整信息。

目前我正在听网格后面的 TADOQuery 的“AfterScroll”事件,但它似乎给了我太多事件。

AfterScroll 是正确的事件吗?你是怎么做到的?

4

2 回答 2

4

“标准”方式(在数据感知环境中)将不使用 GUI 控件进行控制,而是使用数据组件。

大多数表数据集提供MasterSource(链接到适当的TDataSource组件)和MasterFields属性。您可以使用这些以主从关系链接您的数据集。然后你的细节网格(或其他数据感知控件)只需要关注链接到正确的数据集。

编辑
其他类型的数据集(例如TQueryTADOQuery)有时提供DataSource用于类似目的。来自 Delphi 5 帮助:“ Set DataSource to automatically fill parameters in a query with fields values from another dataset.
然而,还有很多复杂的情况(阅读帮助会观察到)。因此,建议使用TTableTADOTable代替详细数据集。

于 2013-06-14T11:31:41.287 回答
1

我不知道是否有任何“标准”方式,但 IMOAfterScroll很好。使用计时器来防止快速连续更新控件,例如在滚动网格时。一个例子:

procedure TSomeForm.DataSetAfterScroll(DataSet: TDataSet);
begin
  if not DataSet.ControlsDisabled then begin
    if ScrollTimer.Enabled then
      ScrollTimer.Enabled := False;
    ScrollTimer.Enabled := True;
  end;
end;

procedure TSomeForm.ScrollTimerTimer(Sender: TObject);
begin
  ScrollTimer.Enabled := False;
  UpdateGUI;
end;

我认为您会发现 250-300 毫秒的间隔令人愉快。

于 2013-06-14T11:57:24.040 回答