![]() |
AW: Livebinding Problem mit Combobox auf Datenfeld
Nein, das Video hatte ich nicht gesehen. Ich schaue es mir gleich mal an. Danke.
Ich programmiere seit etwa beinahe 25 Jahren. Angefangen mit Turbopascal 3.0. Mein erstes Delphi war Delphi 2. Der erste große Umdenkprozess war schon bei Borlandpascal die objektorientierte Programmierung. Da habe ich am Anfang nicht ganz verstanden, was das bringen soll. Naja, mittlerweile kann ich es mir anders nicht mehr vorstellen:) Jetzt wieder das Ding mit den Livebindings. Ich denke halt, dass ich da vielleicht derzeit die gleiche Blockade durchmache, wie zu Beginn der objektorientierten Programmierung. Ich schau mir jedenfalls jetzt mal in Ruhe bei einer Tasse Kaffee Dein Video an und schaue dann weiter, was ich mache. Eventuell frage ich mal bei Embarcadero nach, wie sie sich das vorstellen. |
AW: Livebinding Problem mit Combobox auf Datenfeld
Oh, da erkenne ich mich ziemlich genau wieder ;-)
Du solltest nur das aktuelle LB nicht überbewerten. Es soll einem lediglich etwas Arbeit abnehmen. Die Funktionsweise ist dank der neuen RTTI auchg keine Zauberei. Das Problem ist, dass es zu viele Probleme damit gibt und dass der grundsätzliche Ansatz nicht wirklich sinnvoll ist (um komplexe BL-GUI-Bindungen zu realisieren). Zum Thema "schreiben an Emba" kannst Du hier mal schauen: ![]() ![]() David I hatte mir ein Demoprojekt versprochen, seitdem ist trotz zweifacher Nachfragen Ruhe. Unterstützer in der Thematik sind mir natürlich sehr willkommen. Bin mal gespannt, ob der Kaffe nicht sauer wird, bei meinem "Video". :wink: Sei nicht so streng mit mir, das Anliegen wird hoffentlich erkennbar. |
AW: Livebinding Problem mit Combobox auf Datenfeld
Ja, das scheint wirklich so nicht zu funktionieren.
Ich werde mal bei Embarcadero nachfragen. Einstweilen habe ich aber eine Idee für einen quick and dirty workaround. Ich platziere zusätzlich zur Combobox ein einfaches Editfeld, welches ich unsichtbar setze und versorge im OnChange der Combobox den Text des Editfeldes mit dem Itemindex der ComboBox. Das Editfeld verbinde ich mit der Datenmenge. Eine Kleinigkeit fehlt mir noch. Das Editfeld wird zwar jetzt beim Welchseln von Itemindex der Combobox versorgt, aber das wirkt sich auf das Datenfeld noch nicht aus. Wenn ich im Editfeld den Wert manuell ändere, tut es das schon. Ich muss also wohl im OnChange der Combobox, nach dem Setzen des Edit1,Text noch ein Notify aufrufen. Was genau, weißm ich aber leider nicht. Hat da wer einen Tipp? |
AW: Livebinding Problem mit Combobox auf Datenfeld
Zitat:
Das ist doch eine der Grundfunktionen, wie eine Combobox mit einer Datenbank verbunden wird. Wer speichert schon die Textwerte in der DB? |
AW: Livebinding Problem mit Combobox auf Datenfeld
So, jetzt kommen die nächsten Probleme.
Nachdem ich in Firemonkey nicht so recht weiter komme, habe ich mal eine VCL Testanwendung begonnen, um die Livebindings mal näher unter die Lupe zu nehmen. Scheint so, als würde das nur mit den nativen Delphikomponenten funktionieren. Habe mal ein TAdvEdit von TMS auf das Formular gelegt, aber da bekomme ich keine TLinkControlToField Bindung zusammen. Also ehrlich, so mühsam hätte ich mir das echt nicht vorgestellt. Ich glaube, ich pfeife auf die Livebindings und mache das wieder zu Fuß. Die Livebindings dürften wohl eher so eine Art Marketinggag sein, als eine praktisch nützliche Funktion. Sieht in den Webinars gut aus, funktioniert in der Praxis aber gar nicht. Sehr enttäuschend. Ich frage mich bloß, warum ich letzte Woche so viel Geld in ein XE3 Update investiert habe. Der einzige Grund war der visuelle Livebindingseditor. Sonst wäre ich mal bei XE2 geblieben. |
AW: Livebinding Problem mit Combobox auf Datenfeld
Liste der Anhänge anzeigen (Anzahl: 2)
Schau dir mal den Anhang an, so geht das mit den LiveBindings und der ComboBox :)
|
AW: Livebinding Problem mit Combobox auf Datenfeld
Wow, super. Genau so will ich das haben.
Vielen Dank. Ich habe jetzt nur mal die Exe ausprobiert und gerade mal den Source aufgemacht. Ich schau mir das jetzt genau an und versuche es zu verstehen. Wollte mich nur schnell mal bedanken. Also, nochmal recht herzlichen Dank. |
AW: Livebinding Problem mit Combobox auf Datenfeld
Ich glaube, ich habe es verstanden.
Die Eigenschaftstexte werden nicht als Items in die Combobox geschrieben, sondern als Lookupvalues aus einer Datenmenge geholt. Wenn sie nicht in der DB sind, dann halt über den DataGeneratorAdapter. Ist ein Weg, auf den man erst mal kommen muss. Ich werde es mal damit versuchen. Vielen Dank. Vielleicht hast Du auch eine Lösung für das 2. Problem, nämlich dass ich TMS Edits nicht bidirektional binden kann. Da funktionieren nur Propertybindings und keine Controlbindings. Wenn ich ein Controllink machen will, dann werden diese Komponenten nicht angeboten, obwohl sie den gleichen Vorfahren wie die Standardkomponenten haben. Wenn ich sie aber nur über LinkPropertyToField und nicht LinkControlToField binden kann, dann ist das nur unidirektional, kann also nur anzeigen, aber nichts in die DB zurück schreiben. Gibt es da auch eine einfache Lösung, bzw. wodurch entscheidet das visual livebinding, welche Komponenten wofür angeboten werden? Ich habe gerade ein paar Videos (Webinars)von Embarcadero aufgemacht, die ich mir anschauen werde. Hast Du vielleicht einen Tipp auf ein Video und/oder eine Lektüre, wo das alles halbwegs verständlich beschrieben ist? Die Art, wie Du das gelöst hast,. auf das wäre ich so nie gekommen. Ich suche halt jetzt zur Verkürzung der Einarbeitungszeit eine Quelle, wo ich solche Sachen finde. |
AW: Livebinding Problem mit Combobox auf Datenfeld
![]() Produktiv wird dieser Adapter nicht in Erscheinung treten. Den Weg zu finden war eigentlich ganz einfach, nachdem ich im LiveBindings-Designer bei der ComboBox folgende (automatisch vorbelegte) Eigenschaften sah:
Da ist noch eine Kleinigkeit zum AdapterBindSourceCreateAdapter-Event zu sagen: Jedes mal, wenn
Delphi-Quellcode:
von
TAdapterBindSource.Active
Delphi-Quellcode:
auf
False
Delphi-Quellcode:
wechselt wird dieses Event ausgelöst.
True
Somit sollte man sicherstellen, dass (in diesem Beispiel) die gebundene Liste nicht jedes Mal neu erstellt wird, wenn der Adapter nicht die Kontrolle über diese Liste hat.
Delphi-Quellcode:
Um dieser Liste jetzt zur Laufzeit einen weiteren Eintrag hinzuzufügen:
procedure TForm1.Property_AdapterBindSourceCreateAdapter( Sender : TObject;
var ABindSourceAdapter : TBindSourceAdapter ); begin if not Assigned( FComboValues ) then begin FComboValues := TObjectList < TComboValues < Integer >>.Create; FComboValues.Add( TComboValues<Integer>.Create( 0, 'undefiniert' ) ); FComboValues.Add( TComboValues<Integer>.Create( 1, 'Eigenschaft 1' ) ); FComboValues.Add( TComboValues<Integer>.Create( 2, 'Eigenschaft 2' ) ); FComboValues.Add( TComboValues<Integer>.Create( 3, 'Eigenschaft 3' ) ); FComboValues.Add( TComboValues<Integer>.Create( 10, 'Eigenschaft 10' ) ); end; ABindSourceAdapter := TListBindSourceAdapter < TComboValues < Integer >> .Create( Self, // Owner des BindSourceAdapter FComboValues, // Instanz einer Liste False // Ist der BindSourceAdapter Owner der Liste ); end;
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender : TObject );
begin // Adapter deaktivieren Property_AdapterBindSource.Active := False; // Eintrag hinzufügen FComboValues.Add( TComboValues<Integer>.Create( 11, 'Eintrag 11' ) ); // Adapter aktivieren -> CreateAdapter-Event wird ausgelöst Property_AdapterBindSource.Active := True; // Die ComboBox ist jetzt aber nicht mehr mit dem aktuellen Subject synchron, daher Subject_AdapterBindSource.Refresh; end; |
AW: Livebinding Problem mit Combobox auf Datenfeld
Ich habe das mal auf mein Beispiel umgesetzt und es funktioniert. Habe das auch so weit verstanden.
Vom Datageneratoradapter habe ich schon gewusst. Habe ich in den diversen Webinaren gesehen. Mir hat einfach das um die Ecke denken gefehlt, dass man den auch für sowas missbrauchen kann. Danke für Deine Hilfe.:thumb: Ich werde mir noch ein paar Videos und Blogbeiträge zum Thema rein ziehen. Wenn allerdings jemand einen Tipp für die ultimative Lektüre hat, dann bitte ich um einen dezenten Hinweis.:oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 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