DropBox-Item über DataBindings auswählen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DropBox-Item über DataBindings auswählen

    Ich schaffe es nicht, mithilfe des im DB-Feldes eingetragenen Integerwertes das entsprechende Item (Index der Dropbox) auszuwählen. Umgekehrt natürlich das gleiche Prob: den händisch gewählten Index würde ich dann gern in das DB-Feld befördern...
    Oder
    geht das garnicht direkt mit Bindings? Was muss ich dann fürn Code einfügen?

    Danke schonmal vorab
    Hallo JoyMan,

    kommt eine Fehlermeldung, bzw. was passiert genau bei dem Versuch den Index zu setzen?

    Prinzipiell lässt sich der Index über folgende Eigenschaft setzen, bzw. auslesen.

    VB.NET-Quellcode

    1. myComboBox.SelectedIndex
    Eine Datenbindung ist ja aber genau dazu da, das die gebundenen Daten eben angezeigt werden nicht etwa um damit ein gewissen Eintrag auszuwählen.

    Zum Auswählen eines Eintrages stehen wie bereits genannt Properties wie "SelectedIndex" Index zur Verfügung.

    @xtts02 ich gehe mal davon aus wir sprechen von einer ComboBox, hatte ich bisher überlesen das da DropBox steht^^

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

    Alles richtig, ausser meins. (Auf Zunge beiss)
    Ja, klar: ComboBox.
    Man verzeihe mir die ungewollte Unprofessionalität!
    Ich hab da verschiedene TextBoxen, DateTimePicker und Label die ich von meinem DataSet über DataBindings füllen lasse. Das klappt prima, bis auf die Stellen, wo ich eine Auswahl aufgrund eines Integerwertes treffen lassen will. Das versuche ich mit einer Cbx, deren Items ich mithilfe des Integerwertes aus dem entsprechenden Feld des DataSets ansteuern will.
    ... und das bekomme ich nicht hin!
    @ErfinderDesRades ich gebe zu vielleicht etwas unpräzise Formuliert -> kurz zusammen gefasst wollte ich damit zum Ausdruck bringen, dass es nicht möglich ist einen bestimmten Eintrag mit dem Index aus einem Databinding auszuwählen. Oder irre ich hier ?

    Zum eigentlichen Problem:

    Was würde dagegen Sprechen beim Laden der Daten die Property SelectedIndex aufzurufen

    So in die Richtung

    VB.NET-Quellcode

    1. Dim md as MeineDaten
    2. 'Sonstige Sachen erledigen
    3. myComboBox.SelectedIndex = md.index
    @JoyMan: In vier Views-Videos ist gezeigt, wie das geht. Glaub mehrfach sogar, zumindest aber in FilmX.

    Ich würd übrigens nicht von "per Databinding befüllen" sprechen. Databinding ist eine Technologie, mit der man grad vom "Befüllen" loskommt.

    Was inne Controls ist, ist in den Daten, was in den Daten ist, ist in den Controls - gebunden halt.

    "in den Controls" gibt es garnicht als etwas von den Daten getrenntes, sondern die Controls präsentieren die Daten.
    D.h. sie zeigen sie an, und man kann die Daten auch ändern.

    @MrNobody: Du irrst.
    Weil die BindingSource-Klasse, über die man möglichst alle Bindings laufen lassen sollte, hat eine sog. Current-Verwaltung, alias PositionsZeiger-Verwaltung. Und das kann man nutzen, um sowohl die Auswahl abzulesen, als auch zu setzen.
    Ich meld mich zurück aus der Wüste.

    @EdR: die 4V beziehen sich auf ein Dataset mit mehreren BindingSources.
    Ich habe aber nur eine Quelle (Tabelle).
    Machen kann man da sicher viel, ich habe aber die Auflage: Finger weg von der Datenstruktur.

    Also hab ich so:

    VB.NET-Quellcode

    1. 'mit dem Wert der gebundenen TextBox "RealisationTxt" lege ich den Index der ungebundenen Cbx fest
    2. AuswahlLbx_SelectedIndexChanged(sender As Object, e As EventArgs) Handles AuswahlLbx.SelectedIndexChanged
    3. RealisationCbx.Text = RealisationCbx.Items(RealisationTxt.Text)
    4. End Sub
    5. 'händische Änderung der Realisation trägt die Cbx in die gebundene TextBox ein
    6. Private Sub RealisationCbx_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RealisationCbx.SelectedIndexChanged
    7. RealisationTxt.Text = RealisationCbx.SelectedIndex
    8. End Sub

    So funktioniert das erstmal, obwohl so richtig elegant sieht das nicht aus.