【问题标题】:What is the standard way in delphi 5 to watch for a selection change in a DBGrid?delphi 5中观察DBGrid中选择变化的标准方法是什么?
【发布时间】:2013-06-14 11:12:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: delphi selection delphi-5 dbgrid


    【解决方案1】:

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

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

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

    【讨论】:

    • 我使用的是delphi5,我没有看到MasterSource 属性,只有DataSource。这是一个较新的功能吗?
    • MasterSource 和 DataSource 不一样。但是因为差异取决于您使用的特定组件,所以我将向您推荐帮助文件。 - 当然只是实验! :) MasterSource 也不适用于所有数据集控件(您可能检查了 TQuery)。在 Delphi 5(根据帮助文件)中,它位于 TADOTable、TClientDataSet、TIBTable、TTable 上。 (如我的回答所示 - table 数据集。)
    • @Zalumon PS:您可以在 TQuery 上尝试 DataSource,但还有一些需要注意的地方。同样,请参阅帮助文件。 ;)
    • 嗯,我相信我完全不明白你想告诉我什么。目前我正在收听 TADOQuery 的“AfterScroll”事件(我不知道如何在这里使用表格)。 TADOQuery 不是一个 GUI 控件,或者你是什么意思?此外,我没有详细信息网格,而是一个包含许多组件的整个区域,我在事件触发时手动更新这些组件。
    • @Zalumon 我错过了你没有使用细节网格(因为通常主细节关系是一对多的)。然而,这并没有改变什么。如果您遵循数据感知方法,则详细信息控件仍应链接到详细信息数据集。但是,如果您的细节控件不支持数据,那么您就是在混合范式,我强烈建议您不要这样做。 (我已经更新了我的答案,提到在 TQuery 或 TADOQuery 上使用 DataSource。)
    【解决方案2】:

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

    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 毫秒的时间间隔很愉快。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多