比如,我写一个MyEdit = class(TEdit),加了一个DataSource和一个DataField属性,(类似DBEdit的控件),当选择了DataSource属性后,我的DataField自动从DataSource的DataSet中读字段过来(假设已经有并静态的加到我的Dataset字段列表中了),但我怎么实现,我的程序执行过程中,DataSet.Next时,该Edit里面的值会随着记录的变化而变化呢?(像DBEdit那样),别让我从DBEdit继承哦!我下面的代码不行!!!
procedure TtfEdit.SetDataSource(Value: TDataSource);
begin
  FDataSource := Value;  try
    Self.DataField := FDataSource.DataSet.FieldList.Fields[0].DisplayName;
    FDataSource.DataSet.AfterOpen := DataSetOpen;
    FDataSource.DataSet.AfterScroll := DataSetOpen;
    FDataSource.DataSet.AfterClose := DataSetClose;
  except
    on e :Exception do
    showmessage('Error : ' + e.Message);
  end;
end;
难道不是在这个属性更改时写????

解决方案 »

  1.   

    DataSource的ondatachange事件里
    EDIT.TEXT:=当前记录指定字段的值
      

  2.   

    你还是好好研究一下DBCtrls单元吧,看看TFieldDataLink类是怎么实现数据关联的。
      

  3.   

    procedure TDataSet.DataEvent(Event: TDataEvent; Info: Longint);if NotifyDataSources then
      begin
        for I := 0 to FDataSources.Count - 1 do
          TDataSource(FDataSources[I]).DataEvent(Event, Info);
        if FDesigner <> nil then FDesigner.DataEvent(Event, Info);
      end;
      

  4.   

    procedure TDataSource.DataEvent(Event: TDataEvent; Info: Longint);
    begin
      if Event = deUpdateState then UpdateState else
        if FState <> dsInactive then
        begin
          NotifyDataLinks(Event, Info);
          case Event of
            deFieldChange:
              if Assigned(FOnDataChange) then FOnDataChange(Self, TField(Info));
            deRecordChange, deDataSetChange, deDataSetScroll, deLayoutChange:
              if Assigned(FOnDataChange) then FOnDataChange(Self, nil);
            deUpdateRecord:
              if Assigned(FOnUpdateData) then FOnUpdateData(Self);
          end;
        end;
    end;