AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi [FMX] Combobox per Code mit Daten füllen
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX] Combobox per Code mit Daten füllen

Ein Thema von Devil1925 · begonnen am 7. Feb 2017 · letzter Beitrag vom 17. Feb 2017
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 16. Feb 2017, 11:00
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;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 16. Feb 2017, 13:00
Danke für Deine Mühe! Werde ich sofort mal umsetzen 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?
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.164 Beiträge
 
Delphi 10.3 Rio
 
#3

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

  Alt 16. Feb 2017, 13:38
Danke für Deine Mühe! Werde ich sofort mal umsetzen 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?
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 16. Feb 2017, 13:57
Ich kenn in FMX als Möglichkeit nur die Livebindings, wenn du noch andere (bessere?) Methoden kennst, lasse ich mich gerne Aufklären

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

Danke
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 16. Feb 2017, 14:36
Das hier ist auch ganz sehenswert zu LB.

LB per Code funktioniert bei mir auch ganz gut.
Habe allerdings auch kaum anspruchsvolle DB im Mobilteil, unter Sqlite.
Ist mir auch sympatischer als das LB-Editor Stripenziehen.
Wenn da mal was verrutscht (z.B. bei Updates) dann ist die Übersicht komplett vorbei.

Um damit auf die Art aber größere DB-Projekte zu machen ... naja ...
wäre ich zumindest vorsichtig

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.164 Beiträge
 
Delphi 10.3 Rio
 
#6

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

  Alt 16. Feb 2017, 17:09
Ich kenn in FMX als Möglichkeit nur die Livebindings, wenn du noch andere (bessere?) Methoden kennst, lasse ich mich gerne Aufklären

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

Danke
Besser ist immer so eine Frage... Ich würde es nur so NIE machen...

Delphi-Quellcode:
Procedure TForm14.FillCombobox(Const ACB : TCombobox;Const AFieldName : String);
var
  LBI : TListBoxItem;
  LEntries : ICanHandleDBListFields;
  i : Integer;
begin
  LEntries := Database.GetListFields(AFieldName);

  ACB.BeginUpdate;
  ACB.Clear;
  try
    for i:=0 to LEntries.count-1 do
      begin
        LBI := NewListBoxEntry; // Erzeugt eine LBI mit Height=49 Stylelookup='listboxitembottomdetail' usw.
        LBI.Text := LEnties.Items[i].Text;
        LBI.Detail := LEnties.Items[i].Detail;
        LBI.Parent := ACB;
      end;
  finally
    ACB.EndUpdate;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 16. Feb 2017, 18:02
Wenn die Owner richtig gesetzt sind, dann wird alles automatisch freigegeben.

Und jup, in FMX gibt es keine DB-affinen Controls, da muß man alles irgendwie anders Binden.
TDBEdit und Co. gibt es standardmäßig nur in der VCL und das sind auch nur TEdit, wo ein TDataLink intern dran hängt, der sowas wie das LiveBinding macht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 16. Feb 2017, 19:21
Hallo Mavarik,

das ist auch nur ein Teil der Lösung.
Wenn es richtig bidirectional arbeiten soll, und z.B. auch auf
Updates von anderswoher reagieren soll wird es recht unangenehm.

Ich versuche erstmal mit LB zu leben und mich damit anzufreunden.
Funktionieren tut es in etwa, nur würde ich nicht zuviel erwarten bei komplexen Projekten.
Ich gehe aber stark davon aus das es in Zukunft weiter entwickelt wird, und einen
echten Ersatz für DB-Controls werden wird.
Zumal es ja auch unter VCL arbeitet wird das wohl so etwas wie Embas ORM-Lösung werden.
Ich bin gespannt.

Gibt es vielleicht 3rd-Party Controls die man besser für DB+FMX Binding nutzen sollte ?
Da weiss ich im Moment aber auch keine.

Rollo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz