AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Livebinding Problem mit Combobox auf Datenfeld

Ein Thema von helste · begonnen am 7. Jan 2013 · letzter Beitrag vom 9. Jan 2013
Antwort Antwort
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 11:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 14:29
Schau dir mal den Anhang an, so geht das mit den LiveBindings und der ComboBox
Angehängte Dateien
Dateityp: zip ComboBoxDemo.zip (2,8 KB, 100x aufgerufen)
Dateityp: zip ComboBoxDemo_exe.zip (1,66 MB, 35x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 14:39
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.
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 14:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 15:13
Delphi-Referenz durchsuchenTDataGeneratorAdapter ist eigentlich nur dafür gedacht einen Prototyp zu haben, um zur DesignTime die Controls mit etwas Leben zu füllen und die Felder zum Verlinken an der Hand zu haben (für das VisualLiveBinding) oder auch dem Kunden ein Oberfläche mit einer (Dummy-)Funktion zu präsentieren.
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:
  • Item.Text (das wird angezeigt)
  • Item.LookupData (das ist der verbundene Wert)
  • SelectedValue (das ist der aktuell ausgewählte Wert von Item.LookupData)
Das SelectedValue hat mich dann einfach neugierig gemacht

Da ist noch eine Kleinigkeit zum AdapterBindSourceCreateAdapter-Event zu sagen:

Jedes mal, wenn TAdapterBindSource.Active von False auf True wechselt wird dieses Event ausgelöst.

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:
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;
Um dieser Liste jetzt zur Laufzeit einen weiteren Eintrag hinzuzufügen:
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Jan 2013 um 15:17 Uhr)
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 15:57
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 20:29
Schau dir mal den Anhang an, so geht das mit den LiveBindings und der ComboBox
Hmm, ok es funktioniert. Aber wirklich effektiv ist das nicht.

Wenn ich die Wahl hätte, eine solche Funktionalität in Eventhandlern (so etwas wie OnGetText bzw. OnSetText o.ä.) des GUI-Controls umzusetzen oder in diversen Adaptern...
... dann ist mir die klassische Variante lieber. Der Aufwand bleibt ja der gleiche.

Will sagen: Die Emba-Lösung sagt mir generell nicht zu.


EDIT: Anbei ein Screenshot einer spezialisierten ComboBox, die direkt mit angebundenen Daten umgehen kann.
(Das kann man natürlich auch etwas abweichend organisieren.)
Angehängte Grafiken
Dateityp: jpg odComboBox.jpg (199,5 KB, 27x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 8. Jan 2013 um 21:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 8. Jan 2013, 21:11
@helste

Bitte gerne.

Der DataGenerator wird hier aber nicht missbraucht, sondern das ist der Weg

Lektüre zu LiveBindings gibt es nur verstreut im Netz. Vom Hersteller gibt es bislang nur dürftige Informationen. Mal schauen ob sich das mit Marco ändert ... die Hoffnung stirbt zuletzt.

Bleibt allerdings immer noch die Performance Bremse, wenn es mal mehr wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Livebinding Problem mit Combobox auf Datenfeld

  Alt 9. Jan 2013, 06:52
@Sir, ich habe mir gestern Abend noch dieses Video rein gezogen:
http://www.youtube.com/watch?v=fBoFydYZsMo

Das hat mir sehr für das Verständnis geholfen. Ich habe nun auch eine Idee, was ich mit Livebindings machen kann und was nicht, bzw. was ich machen will und was nicht.

Vermutlich ist der Weg der, gewisse Aufgaben durch Livebindings zu lösen und andere auf anderem Weg.
Wenn man mal das Konzept verstanden hat, dann ist es eigentlich gar nicht so schlecht.

Ein paar Videos habe ich mir noch zur Seite gelegt. Die werde ich mir dann heute Abend weiter rein ziehen.

@Stahli, ich mache das üblicherweise auch so, dass ich mir spezialisierte Komponenten bastle. Werde das mit der Combobox auch machen. Jetzt, wo ich die Funktionsweise der Livebindings mal so halbwegs verstanden habe, sehe ich da einiges deutlich klarer. Ein spannendes Thema. Bin schon gespannt, wie es weiter geht.

Jedenfalls mal herzlichen Dank euch beiden.
  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 22:13 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