Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi [FMX] Combobox per Code mit Daten füllen (https://www.delphipraxis.net/191652-%5Bfmx%5D-combobox-per-code-mit-daten-fuellen.html)

Darlo 7. Feb 2017 12:41

AW: [FMX] Combobox per Code mit Daten füllen
 
[QUOTE=himitsu;1360986]
Zitat:

Zitat von Darlo (Beitrag 1360980)
Delphi-Quellcode:
for i := 0 to sl.Count-1 do
  self.combobox.Items.Add(sl[i]);

Etwas wie
Delphi-Quellcode:
ComboBox.Items.AddStrings(SL);
gibt es im FMX nicht?

Natürlich. Vermutete nur dass die Schleife für den Anwendungsfall passender ist.

Devil1925 7. Feb 2017 13:03

AW: [FMX] Combobox per Code mit Daten füllen
 
Also mir ist bisher halt nur der Weg für die direkte verbindung von Query (TUniQuery) und einer Combobox (TComboBox) über die Livebindings bekannt, welche im Designer erstellt werden. Wenn mir da jemand erklären könnte wie man die Codetechnisch erzeugen kann / mir dafür ein gutes Tutorial empfehlen kann, wäre ich diesem jemand sehr Dankbar!

Alternativ lasse ich mich auch gerne belehren über alternative sinnvolle möglichkeiten die Daten aus einer UniQuery in eine ComboBox einzufügen. Wie ich das mit einer Stringlist machen soll habe ich noch nicht verstanden, ich wäre jetzt mit einer Schleife die Query durchgegangen und hätte jeden eintrag einzeln in der Combobox angelegt. Allerdings erscheint mir das eher weniger sinnvoll. (Oder irre ich mich da?)

Devil1925 15. Feb 2017 08:06

AW: [FMX] Combobox per Code mit Daten füllen
 
Mein Bisheriger Versuch sieht folgendermaßen aus und funktioniert leider nicht, kann mir da jemand verraten, wo ich da meinen Fatalen Fehler mache?

(Ich vermute irgendwo in der zuweisung Link zu Combobox)

Delphi-Quellcode:
procedure TForm14.Button2Click(Sender: TObject);
var BS:TBindSourceDB;
    CB:TCombobox;
    Link:TLinkListControlToField;
    Query:TUniQuery;
begin
  Query := TUniQuery.Create(Self);
  Query.Connection := Conn;
  Query.SQL.Text := 'Select * from Lieferan';
  Query.Open;


  BS := TBindSourceDB.Create(Self);
  BS.DataSet := Query;

  CB := TCombobox.Create(Rectangle1);
  CB.Parent := Rectangle1;

  Link := TLinkListControlToField.Create(Self);
  Link.AutoActivate := True;
  Link.Category := 'Schnelle Bindung';
  Link.Control := CB;
  Link.DataSource := BS;
  Link.FieldName := 'Name1';

  BS.DataSet.Open;
end;

Devil1925 15. Feb 2017 15:13

AW: [FMX] Combobox per Code mit Daten füllen
 
irgendwer eine Idee / einen Stoß in die richtige Richtung oder ähnliches? oder ist es wirklich das Sinnvollste die Query Datensatz für Datensatz zu durchlaufen?

Rollo62 15. Feb 2017 16:21

AW: [FMX] Combobox per Code mit Daten füllen
 
Wenn du die Verbindung mit LiveBindings-Editor machst legt der LB-Editor die entsprechenden Komponenten richtig an.
Die kannst du dir mal anschauen im Dfm.Modul in der Text-Ansicht, und das dann womöglich zur Laufzeit von Hand selber schreiben, wenn es das ist was du meinst ?

Ansonsten die ComboBox wirklich von Hand, ohne LiveBindings beschreiben.
Mit durchlaufen von Dataset.First, Dataset.Next, etc.

Rollo

Devil1925 16. Feb 2017 08:05

AW: [FMX] Combobox per Code mit Daten füllen
 
Danke an alle, die mir input gegeben habe! Ich habe nun eine Funktionierende Lösung!

Delphi-Quellcode:
procedure TForm14.FillList(DataSet:TUniQuery; Control:TControl; FieldName:String);
var
    BindSourceDB : TBindSourceDB;
    BindingsList : TBindingsList;
    LinkListControlToField : TLinkListControlToField;
begin

    BindSourceDB := TBindSourceDB.Create(nil);
    BindSourceDB.DataSet := DataSet;
    BindSourceDB.DataSource.Enabled := true;
    BindSourceDB.DataSet.Active := true;

    BindingsList := TBindingsList.Create(BindSourceDB);

    LinkListControlToField := TLinkListControlToField.Create(BindingsList);
    LinkListControlToField.Control   := Control;
    LinkListControlToField.DataSource := BindSourceDB;
    LinkListControlToField.FieldName := FieldName;
    LinkListControlToField.Active    := true;
end;
gefunden habe ich die gerade hier.

himitsu 16. Feb 2017 11:00

AW: [FMX] Combobox per Code mit Daten füllen
 
Für ein schöneres Debugging, sollte man seinen Kompoennten immer einen Namen geben.
Und wer gibt bei dieser Variante das ganze wieder frei, wenn der Owner leer ist?

Mit einem Namen kann man beim Debuggen erstmal sehen, wen man in den Pfoten hat, wenn man 'nen Zeiger auf "irgendein" Control hat.
Und man kann hier z.B. eine Prüfung einbauen.
Delphi-Quellcode:
procedure TForm14.LinkToControl(Control: TControl; DataSet: TDataSet; FieldName: string);
var
  DataName: string;
  BindSourceDB: TBindSourceDB;
  BindingsList: TBindingsList;
  LinkListControl: TLinkListControlToField;
begin
  DataName := DataSet.Name;
  if (DataName = '') and Assigned(DataSet.DataSource) then
    DataName := DataSet.DataSource.Name;

  if Assigned(Control.FindComponent(DataName + '_BindSource')) then
    raise Exception.CreateFmt('LinkToControl: %s.%s ist bereits an %s (%s) gebunden.', [DataName, FieldName, Control.Name, Control.ClassName]);

  BindSourceDB := TBindSourceDB.Create(Control);
  BindSourceDB.Name              := DataName + '_BindSource';
  BindSourceDB.DataSet           := DataSet;
  BindSourceDB.DataSet.Active    := True; // das Beides hat hier doch eigentlich nichts zu suchen
  BindSourceDB.DataSource.Enabled := True; //

  BindingsList := TBindingsList.Create(BindSourceDB);
  BindingsList.Name              := DataName + '_BindingsList';

  LinkListControl := TLinkListControlToField.Create(BindingsList);
  LinkListControl.Name           := DataName + '_LinkListControl';
  LinkListControl.Control        := Control;
  LinkListControl.DataSource     := BindSourceDB;
  LinkListControl.FieldName      := FieldName;
  LinkListControl.Active         := True;
end;

Devil1925 16. Feb 2017 13:00

AW: [FMX] Combobox per Code mit Daten füllen
 
Danke für Deine Mühe! Werde ich sofort mal umsetzen :D und jetzt noch eine Frage für die Verständlichkeit meinersets...

Wenn ich jetzt das Control Frei gebe, wird dann auch alles andere Freigegeben? also BindsourceDB, Bindingslist und LinkListControl?

Mavarik 16. Feb 2017 13:38

AW: [FMX] Combobox per Code mit Daten füllen
 
Zitat:

Zitat von Devil1925 (Beitrag 1361831)
Danke für Deine Mühe! Werde ich sofort mal umsetzen :D und jetzt noch eine Frage für die Verständlichkeit meinersets...

Wenn ich jetzt das Control Frei gebe, wird dann auch alles andere Freigegeben? also BindsourceDB, Bindingslist und LinkListControl?

Gibt es einen besonderen Grund, warum Du es unbedingt - wenn du es eh schon im Source machst - über die Livebindings machen willst?

Abgesehen von den ganzen lokalen Variablen inkl. der Datenbank Geschichten?

Devil1925 16. Feb 2017 13:57

AW: [FMX] Combobox per Code mit Daten füllen
 
Ich kenn in FMX als Möglichkeit nur die Livebindings, wenn du noch andere (bessere?) Methoden kennst, lasse ich mich gerne Aufklären :-D

für mich sieht die Methode des durchlaufens der Query in einer Schleife (First, Next) halt danach aus, als wäre es deutlich langsamer als die LiveBindings. Ausserdem kann ich dann doch direkt (bei z.B. Edit-Feldern) den geänderten Wert per "Post" in die Datenbank schreiben. Wenn ich da einen Denkfehler habe, so kläre mich doch bitte auf :D

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz