AGB  ·  Impressum  







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

[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
Seite 3 von 3     123
Rollo62

Registriert seit: 15. Mär 2007
1.085 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#21

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)
3.656 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#22

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
33.262 Beiträge
 
Delphi XE3 Professional
 
#23

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
1.085 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

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
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.656 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#25

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

  Alt 16. Feb 2017, 21:54
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.
Nö eigentlich nicht...

Seit ich MVVM für mich entdeckt habe stellt sich diese Frage irgendwie nicht mehr...

Was soll meine View mit irgend einer Datenbank Komponente?

Meine View macht nur das was sie soll... Mein ViewModel steuert das... Mein Model kennt die Daten und bekommt entweder über eine Factory oder
über den Constructor ein CRUD Interface für die Datenbank...

Alle getrennt, alles schick, alles testbar...

Abgesehen davon, dass es in den Schichten somit viel mehr Threading Möglichkeiten gibt, was das etwas mehr Kommunikationsoverhead deutlich wett-macht.
Somit ist alles schneller...

Mavarik
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
1.085 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#26

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

  Alt 17. Feb 2017, 06:30
Wenn der View nicht die Arbeit macht dann eben das ViewModel.
Irgendwo musst du ja die Logik reinbauen.
Womöglich hast du Wrapper-Klassen für jede Komponente, die das dann optimal machen.
Das wäre ja OK.

Vom Code unten frage ich mich wie du das machst wenn nur ein Record in
die DB "inserted" wird ?
Immer die ganze ComboBox neuanlegen/neuzeichnen lassen, oder lässt du da auch nur
das eine, richtige Item hinzufügen ?

Das immer komplett Alles neuzuzeichen fände ich ziemlich unperformant.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.656 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#27

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

  Alt 17. Feb 2017, 10:57
Wenn der View nicht die Arbeit macht dann eben das ViewModel.
Irgendwo musst du ja die Logik reinbauen.
Womöglich hast du Wrapper-Klassen für jede Komponente, die das dann optimal machen.
Das wäre ja OK.

Vom Code unten frage ich mich wie du das machst wenn nur ein Record in
die DB "inserted" wird ?
Immer die ganze ComboBox neuanlegen/neuzeichnen lassen, oder lässt du da auch nur
das eine, richtige Item hinzufügen ?

Das immer komplett Alles neuzuzeichen fände ich ziemlich unperformant.

Rollo
Wenn ich die Zuweisung nicht selber mache nach dem Motto: Feld X hat sich geändert sende PropertyChangeEvent,
dann habe ich eine eigene Routine die eine View 1:1 an ein ViewModel "klöppelt". Wenn der User etwas eingibt,
wir automatisch die entsprechende Property im Daten-Bereich des ViewModel geändert. Andererseits wenn sich das Model ändert,
kann ich mit einem Refresh (1 Event) die View aktualisieren.

Das Ding mit der Combobox war ja wenn ich es richtig verstanden habe "nur" für Fetchlisten -> Hole alle Anreden aus der Datenbank.

Das füllen der Liste ist kein Thema und unter FMX wird ja per GPU nur das neu gezeichnet was auch sichtbar ist... wenn es nicht 10000 Einträge sind...
Kaum messbar.

Mavarik

PS.: Bei 10000 Einträgen würden man sowieso ne Listview nehmen oder einen eigenen Pager bauchen... Niemand scrollt durch eine Liste von 10000 Einträgen.
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
206 Beiträge
 
Delphi 10 Seattle Architect
 
#28

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

  Alt 17. Feb 2017, 12:41
Die verwendung war so gedacht: Hole alle Datensätze (seien es meinetwegen Anreden) aus der Datenbank und zeige sie mir in der Combobox an. Dann wird eins Ausgewählt aus der Combobox (in diesem bespiel sei es mal "Herr"). Danach brauche ich die Informationen die es sonst noch zu dem Datensatz gibt. Also z.B. Briefanrede, Anrede_Nr, etc.
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)
3.656 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#29

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

  Alt 17. Feb 2017, 13:04
Die verwendung war so gedacht: Hole alle Datensätze (seien es meinetwegen Anreden) aus der Datenbank und zeige sie mir in der Combobox an. Dann wird eins Ausgewählt aus der Combobox (in diesem bespiel sei es mal "Herr"). Danach brauche ich die Informationen die es sonst noch zu dem Datensatz gibt. Also z.B. Briefanrede, Anrede_Nr, etc.
Ja, so hatte ich es verstanden...

Also im OnChange der Combobox per TagObject, Tag oder was auch immer den Rest laden...

ggf. (Falls lokale DB) kannst Du nach dem die Combobox gefüllt ist eine Thread starten (vorausgesetzt die Auswahl ist begrenzt) und hier alle Möglichkeiten preloaden... Dann ist bei einem OnChange das Ergebniss sofort da...

Kommt aber stark auf die Anwendung an...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
206 Beiträge
 
Delphi 10 Seattle Architect
 
#30

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

  Alt 17. Feb 2017, 13:33
OK, Danke Gucke ich mir bei gelegenheit mal genauer an ob das sinnvoll ist oder nicht... ich mache jetzt erstmal wochenende!

Vielen Dank für die Hilfe und einen schönen Wochenabschluss wünsche ich
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf