Einzelnen Beitrag anzeigen

Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

DB-Controls DataField über RTTI zuweisen

  Alt 3. Feb 2016, 15:03
Delphi-Version: XE
krieg ich einfach nicht hin.

Ich will verschiedene DB-Controls (DBEdit, DBCheckbox...) auf einem Formular dynamisch über RTTI konfigurieren. Dazu frage suche ich meine Komponente über den Namen, frage, ob die Komponente eine Property mit dem Namen DataField hat und will anschliessend den Wert des Datafields über RTTI setzen (Ebenso dann DataSource).
Im Testprojekt kann ich width oder Hint setzen, aber eben nicht DataField. DataField direkt zuweisen geht aber wieder.

Code:
procedure TForm10.Button1Click(Sender: TObject);
var
  context: trtticontext;
  aType: TRttiType;
  aproperty: Trttiproperty;
  aValue: TValue;
begin
  aType := context.GetType(TDBEdit);
  for aproperty in aType.GetProperties do
  begin
    if aproperty.name = 'Width' then
    begin
      aproperty.SetValue(DBEdit2, TValue.From(250)); //geht
    end;
    if aproperty.name = 'DataField' then
    begin
      aproperty.SetValue(DBEdit2, TValue.From('ARTIKEL')); // Datafield zuweisen geht nicht
    end;
    if aproperty.name = 'Hint' then
    begin
      aproperty.SetValue(DBEdit2, TValue.From('Artikel')); // Hint zuweisen geht
    end;
  end;
end;

procedure TForm10.Button2Click(Sender: TObject);
begin
  DBEdit2.DataField:='Artikel'; //String direkt zuweisen funktioniert
end;
  Mit Zitat antworten Zitat