TDataGrid的Datasource是什么时候构造的?(50分)

  • 主题发起人 主题发起人 zjmaskman
  • 开始时间 开始时间
Z

zjmaskman

Unregistered / Unconfirmed
GUEST, unregistred user!
继承于TDataGrid的一个子类,增加了一个私有成员 FDataset:TDataset,希望保存Datasource属性中指向的数据集,从而捕捉数据集的AfterOpen事件。我这样写:

type
TDBGridChild = class(TDBGrid)
private
FDataset:TDataset;
protected
procedure DatasetAfterOpen(Dataset:TDataset);
public Constructor Create(AOwner:TComponent);override;
......
end;

implementation
......
Constructor TDBGridChild.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FDataset := TDataset.Create(AOwner);
FDataset := Datasource.DataSet;
//运行到此出错,原因是Datasource = nil,但我在Object Inspector中已对该组件的Datasource属性进行了赋值。难道Datasource属性并不是在构造函数中已构建完毕吗?
FDataset.AfterOpen := DatasetAfterOpen;
end;
 
VCL不是有源码的吗,为什么不自己查一下源码?
 
VCL中的DBGrids.pas中有关的datasource的代码是用FDataLink这个私有对象成员通过Setdatasource函数来设置datasource,但即使我在构造函数中引用DataLink.Datasource,也会出错,datasource还是nil.
 
DBGride的DataSource是要赋值或关联的
 
DBGrid在创建时,还没有进行DataSource的赋值,DataSource的赋值是在SetDataSource函数中完成。所以你想在你的DBGrid创建时就取得DataSource所指向的DataSet是根本不可能的。
 
后退
顶部