Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Livebinding Problem mit Combobox auf Datenfeld (https://www.delphipraxis.net/172500-livebinding-problem-mit-combobox-auf-datenfeld.html)

helste 7. Jan 2013 16:40

Livebinding Problem mit Combobox auf Datenfeld
 
Ich habe gerade XE3 installiert und fange an mich mit Livebindings zu beschäftigen.
So ungefähr habe ich das auch schon verstanden und mit dem vissuellen Livebindingseditor ist das eigentlich ganz einfach.
Jetzt hänge ich aber bei einem wohl trivialen Problem und habe nach stundenlangem Herumprobieren und Googeln keine Lösung gefunden.

Ich habe eine Datentabelle mit einem Integer Feld, welches einen bestimmten Wert zwischen 0 und sagen wir mal 10 hat.
Jeder dieser Werte repräsentiert eine bestimmte Eigenschaft.
Beispiel:
0 = undefiniert
1 = Eigenschaft 1
2 = Eigenschaft 2
3 = Eigenschaft 3

etc.

Nun habe ich auf dem Eingabeformular eine Combobox, platziert und möchte diese zum einen mit Items füllen, die eben den Eigenschaften entsprechen, also undefeiniert, Eigenschaft 1, etc.
Aus der Combobox soll eine Eigenschaft ausgewählt werden können und in der Datenbank soll dann entsprechend der Integerwert (in dem Fall also eigentlich Itemindex) gespeichert werden.
Umgekehrt soll natürlich auch anhand des gespeicherten Wertes gleich der Itemindex der Combobox gesetzt werden, damit der richtige Eigenschaftstext angezeigt wird.
Das möchte ich über Livebindings ralisieren. Irgendwie funktioneirt das aber nicht. Binde ich itemindex an das Feld, dann wird es zwar richtgi angezeigt, aber ich kann dann den Feldwert nicht neu setzen.
Außerdem bräuchte ich unter Umständen noch einen Weg für den nicht so trivialen Fall, dass der Feldwert genau dem Itemindex entspricht, sondern die Einträge der Auswahlliste durchaus eine andere Sortierung haben sollten, als der Integer Wert im Datenfeld, den sie repräsentieren.

Kann mir da vielleicht jemand auf die Sprünge helfen, bevor ich gleich wieder die Livebindings ad acta lege, noch ehe ich richtig damit angefangen habe?
Blöderweise gibt es jede Menge Tutorials, aber genau diese Problematik, die doch eigentlich so gängig sein sollte, wird nirgendwo erklärt.

Danke schon mal im Voraus.

stahli 7. Jan 2013 17:07

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Zitat:

Zitat von helste (Beitrag 1198126)
Außerdem bräuchte ich unter Umständen noch einen Weg für den nicht so trivialen Fall, dass der Feldwert NICHT genau dem Itemindex entspricht, sondern die Einträge der Auswahlliste durchaus eine andere Sortierung haben sollten, als der Integer Wert im Datenfeld, den sie repräsentieren.

Da fehlt wohl ein "nicht", dann wird es verständlicher...

Da stößt Du genau auf die Probleme mit dem DataBinding (neben dem Gitter-Problem).
Für manche Dinge sind die schon nützlich, man stößt aber schnell an Grenzen wenn man ein paar etwas speziellere Anforderungen/Wünsche hat.
Allgemein kann ich jetzt nicht sagen, wie die ItemIndex-Bindung möglich ist (schaue heute Abend mal nach). Spätestens, wenn Du die Reihenfolge ändern willst, musst Du eine "Übersetzung" hinterlegen. Du musst irgendwo nachsehen, welchen Index Du für Deinen Wert brauchst und umgekehrt. Dazu musst Du irgendwelchen Code ausführen. In einer einfachen Expression kannst Du das nicht erledigen ... außer, Du ruftst in der Expression eine Funktion auf - dann kannst Du das aber auch in einer Ereignisbehandlung durchführen.

Die Möglichkeiten einer Datenbindung sind da begrenzt.

Für manche Aufgaben sind sie praktisch und nützlich, aber sie haben ihre Schwächen und Tücken.


EDIT: Oh, herzlich willkommen noch! :-)

helste 7. Jan 2013 17:13

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Danke für Deine Antwort. Ja, ein NICHT macht es verständlicher. Sorry, Deutsch ist eine Fremdsprache für mich. Bin nämlich Österreicher;-)

Der triviale Fall, wo Itemindex dem wert in der Tabelle entspricht, wäre schon mal ein Anfang.
Wenn ich dann noch wüsste, ob es einen Eventhandler gibt, der zum Ermitteln des zu speichernden Wertes aufgerufen wird, dann könnte ich darüber dann auch eine Umsetzung von Itemindex auf einen beliebigen anderen Integerwert einfach realisieren.
Ist halt alles noch neu für mich. Jetzt fühle ich mich wieder wie ein blutiger Programmieranfänger, obwohl ich seit Turbopascal 3.0 dabei bin.

Edit: Achja, noch ein Zusatz: Den nicht trivialen Fall kann ich auch ganz simpel in einem Trigger der Datenbank erledigen. Reicht also erst mal die Verbindung Itemindex zum Datenfeld.

Edit2: Und danke für den Willkommensgruß. Bin hier ja schon lange registriert, habe bisher aber nur gelesen.

stahli 7. Jan 2013 17:26

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Was noch interessant sein könnte: Suchst Du eine Lösung für VCL oder FMX (kann ja u.U. leichte Differenzen geben)?

RWarnecke 7. Jan 2013 17:32

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Hier mein Versuch unter der VCL mit den LiveBindings und einer Combobox. Link

Ich habe es mittlerweile aufgegeben mit Livebindings zu arbeiten. Aus meiner Sicht sind die LiveBindings nicht ausgereift und selbst die Standard-Komponenten von Delphi werden nicht richtig unterstützt (z.B. DateTimePicker).

Bummi 7. Jan 2013 17:44

AW: Livebinding Problem mit Combobox auf Datenfeld
 
:thumb:

helste 8. Jan 2013 07:13

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Danke für die Antworten.
Aktuell suche ich eine Lösung für Firemonkey.
Ich habe auch schon festgestellt, dass es bei Livebindings merkwürdige Phänomene gibt, habe das aber eher dem Umstand, dass ich damit noch keine Erfahrung habe und eventuell Fehler bei der Anwendung gemacht habe, zugerechnet.
Dabei habe ich extra von XE2 auf XE3 upgegraded, damit ich den visuellen Livebinding Editor nutzen kann, weil das in XE2 sehr umständlich war.
Sieht auch ganz nett aus und ist für einige Dinge ganz praktisch, aber wenn man dann schon bei so einfachen Aufgaben scheitert, wird es mühsam.
Eventuell werde ich einen Mix aus Livebindings und konventionellem Vorgehen nutzen.

Wenn aber wer für die Verbindung von Itemindex in einer Combobox zu einem Datenfeld eine Lösung hat, wäre ich für Hinweise dankbar.

Rolf, Deinen Beitrag bzw. den ganzen Thread aus dem Oktober habe ich gelesen, aber daraus kann ich nicht erkennen, wie Du Itemindex mit dem Datenfeld verbunden hast, sodass auch der itemindex gespeichert wird.
Wenn ich Itemindex mit dem Datenfeld verbinde, so ist das immer nur unidirektional und dient daher nur der Darstellung des Datenbankwertes.

Oder habe ich da noch was übersehen?

Furtbichler 8. Jan 2013 07:21

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Zitat:

Zitat von helste (Beitrag 1198162)
Wenn aber wer für die Verbindung von Itemindex in einer Combobox zu einem Datenfeld eine Lösung hat, wäre ich für Hinweise dankbar.

Hinweis: Third-Party Controls, also TMS, DevExpress usw. Erst damit macht das Programmieren Spaß. Obwohl, Quatsch. Programmieren macht sowieso Spaß, aber mit besseren Controls macht es noch mehr Spaß und spart Zeit und bringt mehr Geld.

helste 8. Jan 2013 07:30

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Ja, das ist mir schon klar. Deshalb habe ich auch so gut wie alles, was es von TMS gibt. Auch die Firemonkeysuite.
Habe sie aber erst kurz. Gibt es da einen Comboboxersatz, wo das problemlos funktioniert?
Muss ich gleich mal genauer schauen.

stahli 8. Jan 2013 08:26

AW: Livebinding Problem mit Combobox auf Datenfeld
 
Hast Du meinen Beitrag von gestern gesehen: http://www.delphipraxis.net/172249-d...ml#post1198159 ?
Am Videoanfang habe ich mal unter FMX Dein Problem versucht zu lösen. Ist mir aber nicht gelungen.
Ich denke nicht, dass Du Dich zu ungeschickt anstellst. Die LB sind einfach der falsche Ansatz.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 1 von 3  1 23      

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