zwei Bindungen der Sammlung an dieselbe Eigenschaft

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    zwei Bindungen der Sammlung an dieselbe Eigenschaft

    ausgelagert aus Databinding bei einer Textbox ~VaporiZed

    Hallo VB-Gemeinde,

    ich muss noch einmal dieses Thema nach vorne holen.

    Ich habe in meinem Programm eine Dropdown-Box, in der ich Tabellen zur Auswahl lade. Wenn eine Auswahl getroffen wurde, dann wird in einer Textbox eine Erläuterungstext zur Auswahl angezeigt.

    VB.NET-Quellcode

    1. Label8.DataBindings.Add(New Binding("TEXT", BS, "BESCHREIBUNG"))


    Wird die Dropdown-Box noch einmal aufgeklappt und ein anderer Tabellenname ausgewählt, so wird automatisch der neue Erläuterungstext angezeigt. Eigentlich funktioniert also alles, wie es soll. Allerdings logge ich Fehler über den "Try Catch End Try" Block im Hintergrund in einer Datenbank mit. Hier habe ich dann den Fehler gefunden, der sich im Vordergrund nicht zeigt.

    Dies führt dazu, dass sich zwei Bindungen der Sammlung an dieselbe Eigenschaft binden

    Pinzipiell sollte mir das ja egal sein, es läuft ja alles, allerdings kann das nicht die Lösung sein.

    Hat jemand eine Idee? Was mache ich falsch? ?(


    Gruß vom Doc

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Führst Du die genannte Codezeile selber aus oder steht sie nur im Designer?

    DrZwockel schrieb:

    dann wird in einer Textbox eine Erläuterungstext zur Auswahl angezeigt
    Was hat das mit Label8 zu tun?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo ErfinderDesRades,

    ich habe den Try-Catch-End Try Block mal auskommentiert und der Fehler hält genau auf der Stelle.

    VB.NET-Quellcode

    1. ...
    2. ' Das DataTable liest den Reader aus
    3. DT.Load(Reader)
    4. ' Reader wird geschlossen
    5. Reader.Close()
    6. '
    7. FXConn.Conn2Oracle.Close()
    8. ' Die BindingSource erhält das DT als Quelle
    9. BS.DataSource = DT
    10. ' ComboBox zur Auswahl bekommt neue Datenquelle
    11. CboGruppen.DataSource = BS
    12. ' AnzeigeFeld wird zugewiesen
    13. CboGruppen.DisplayMember = "GRPNAME"
    14. ' WertFeld wird zugewiesen
    15. CboGruppen.ValueMember = "GRUPPE"
    16. ' Beschreibungsfeld wird gefüllt
    17. Label.DataBindings.Add(New Binding("TEXT", BS, "BESCHREIBUNG")) <------ hier tritt der Fehler auf und der Compiler hält
    18. ...


    Wobei Label8 die Textbox ist.

    Im VS kann dann folgende Fehlermeldung nachvollzogen werden:
    Dies führt dazu, dass sich zwei Bindungen der Sammlung an dieselbe Eigenschaft binden.
    Parametername: binding

    Gruß vom Doc

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DrZwockel“ ()

    Laufzeitbinding hab ich noch nie gebraucht, aber geht das nicht auch schon zum Anfang? Wenn nicht per Designer, dann ggf. im Form_Load-/Shown-EventHandler, sodass das Ganze nur 1x ausgeführt wird?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaproZed,

    Das Problem ist (für mich), dass die Auswahl der Tabellengruppen über das erste Dropdown geändert werden kann.

    Beispiel:
    Bei der ersten Auswahl wählt der Nutzer die Gruppe "P" aus, was dazu führt, dass das andere Dropdown mit allen Tabellen der Gruppe "P" gefüllt wird. Hierbei wird eine SQL Anweisung zur Füllung an die Datenbank gesendet. Das Dropdown gefüllt und der Anzeigetext der Textbox zugewiesen. Jetzt bemerkt der Nutzer, dass seine Auswahl Quatsch war und er die Gruppe "T" haben wollte und wählt diese in der Gruppenauswahl (Dropdown) neu aus. Dies führt dann dazu, dass das Dropdown für die Tabellenauswahl nun neu gefüllt werden muss. Also wird ein neue SQL-Anweisung an die Datenbank gesandt und das Dropdown neu gefüllt. Damit aber auch der Text, der dann in der Textbox angezeigt werden muss. Bei dieser Zuweisung greift dann der beschriebene Fehler.

    Ich wüsste nicht, wie ich das verhindern bzw. abstellen kann. In Google finde ich immer nur eine Lösung, wie man die Textbox an das Bindingsource bindet ...

    Gruß vom Doc
    Wenn ich das richtig interpretiere, ist es doch so: Die BindingSource (BS) bleibt doch die selbe. Nur deren DataSource wird geändert. Da Du aber mit Deinem DataBinding nicht an die BS-DataSource bindest, sondern an die BS selbst, musst Du doch gar nix am Binding selber ändern.
    Für den Fall, dass ich falsch liege, mach es anders: bevor Du das neue Binding erzeugst, entferne alle alten und die Sache ist gegessen: Label.DataBindings.Clear
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    DrZwockel schrieb:

    Ich wüsste nicht, wie ich das verhindern bzw. abstellen kann.
    hmm - ich habs doch gesagt:

    ErfinderDesRades schrieb:

    jo, vermutlich wird der Code mehrmals durchlaufen.
    Ein Binding darf aber nur einmal geadded werden - das meint auch die Fehlermeldung.
    Ist daran iwas unklar?

    Jetzt das fehlerverursachende Mehrfach-Durchlaufen beizubehalten (ja gradezu zu zementieren!), indem das Binding jedesmal entfernt und wieder hingemacht wird kanns doch net sein.

    Das wäre ja wie wenn die katholische Kirche vor jedem Beischlaf verlangte, sich scheiden zu lassen und erneut zu heiraten ;)
    Deswegen ja auch:

    VaporiZed schrieb:

    ggf. im Form_Load-/Shown-EventHandler, sodass das Ganze nur 1x ausgeführt wird?
    und erst wenn das nicht geht, dann eben vor dem zwangsweisen DataBinding-Hinzufügen alte Bindings löschen - als Ultima ratio. Wenn das Szenario verhinderbar ist, dann umso besser, richtig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.