【发布时间】:2015-08-31 19:49:11
【问题描述】:
我正在开发一个DataAware组件并在数据库打开后执行一些代码。
这是我目前的代码:
TMyDataAwareComponent = class(TDataAwareComponent)
private
{ Private declarations }
procedure ToBeExecutedOnAfterOpen(DataSet: TDataSet);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
end;
constructor TMyDataAwareComponent.Create(AOwner: TComponent);
begin
inherited;
if Assigned(Self.DataSource) then
begin
Self.DataSource.DataSet.AfterOpen := ToBeExecutedOnAfterOpen;
end;
end;
procedure TMyDataAwareComponent.ToBeExecutedOnAfterOpen(DataSet: TDataSet);
var
i: Integer;
begin
// Do something here
end;
代码工作正常,但链接到组件的数据集的 AfterOpen 事件不再触发。 如何确保 AfterOpen 事件首先在数据集中触发,然后在我的组件中触发?
是否有适用于数据集中所有事件的解决方案(BeforeOpen、AfterOpen、BeforeCancel、BeforeDelete、AfterCancel、AfterDelete 等)?
【问题讨论】:
-
代码运行正常,但链接到组件的数据集的 AfterOpen 事件不再触发。你劫持了它!
-
编写数据感知组件参考 Delphi 作者已经完成的一个。对于单字段编辑器,请查看
TDBEdit及其FDataLink字段;对于类似网格的组件,请查看TDBGrid及其FDataLink字段。 -
您需要检查 Self.DataSource.DataSet 是否也已分配,fwiw。
标签: delphi events components