Como alterar a propriedade DataSource de diversos controles data-aware de uma só vez

 

Se você precisa alterar a propriedade DataSource de diversos controles data-aware que não possuem um ancestral em comum, você pode utilizar o RTTI (run-time type info) do Delphi e chamar apenas um procedimento. Como funciona:

 

uses TypInfo;

...

procedure ApplyDataSource(dbCtrls: array of TControl; DS: TDataSource) ;

var

  cnt: Integer;

  PropInfo: PPropInfo;

begin

  for cnt := Low(dbCtrls) to High(dbCtrls) do

  begin

    PropInfo := GetPropInfo(dbCtrls[cnt].ClassInfo, 'DataSource') ;

    if Assigned(PropInfo) then

      SetOrdProp(dbCtrls[cnt], PropInfo, LongInt(DS)) ;

  end;

end;

...

 

Forma de utilizar:

ApplyDataSource([DBNavigator1, DBText1, DBButton1], DataSource1);