none
Falscher Datensatz beim Zugriff auf Combobox (immer vorhergehender) RRS feed

  • Frage

  • Hört sich ein bisschen ulkg an, ist aber leider so.

    Hier kommt der Testcode:

    Private Sub cbxGATyp_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxGATyp.SelectedIndexChanged
            Debug.Print("Ausgewählter Typ:   Index={0}, Value={1}", Me.cbxGATyp.SelectedIndex, Me.cbxGATyp.SelectedValue)
    
            ' Dim rwKunde = DirectCast(DirectCast(kundeBindingSource.Current, DataRowView).Row, KundeRow)
            Dim rwAuftraggeber = DirectCast(GATypen_BindingSource.Current, DataRowView).Row
    
            Debug.Print(rwAuftraggeber.Item(0))
            Debug.Print(rwAuftraggeber.Item(1))
            Debug.Print(rwAuftraggeber.Item(2))
            Debug.Print(rwAuftraggeber.Item(3))
    
            ' Debug.Print(rwAuftraggeber.Item(4))
            Debug.Print("Versicherung={0}", rwAuftraggeber.Item(5))
        End Sub

    Das ist zunächst mal unsinniger Testcode.

    Es soll nur der Zugriff auf zusätzliche Spalten der Combox (wohl eher der zugrundeliegenden Datenquelle) demonstriert werden.

    Das Event scheint das Richtige zu sein, der selectedvalue ist auch korrekt.

    Hingegen scheinen die durch den DirectCast abgegriffenen Werte immer den VORHERIGEN Datensatz zu repräsnetieren, nicht aber den GERADE NEU gewählten.

    Wähle ich in der Comboxbox NOCXHMALS denselben Eintrag aus, stimmt's.

    Was mache ich falsch  ?

    Sonntag, 14. Dezember 2014 07:26

Alle Antworten

  • Kann ich selber ebantworten:

    Den DirectCast-Code muss man in das CurrentChanged-Event der BindingSource verlagern, dann bekomme ich für die Versicherung gleich den richtigen Wert.

    Jetzt ergibt sich aber gleich die nächste Frage:

    Ich ermittle die Verischerung um diesen Wert als Auswahl für ein anderes Combox zu nehmen.

    Der ermittelte Wert ist aber der Fremdschlüssel und nicht der Index im anderen Combox

    Sonntag, 14. Dezember 2014 07:35
  • Hi,
    Eine Combobox besteht aus 2 Teilen: der Lise und der TextBox mit dem aus der Liste ausgewählten  Element.

    Wenn die Liste einfach nur eine Liste von Zeichenketten ist, dann ist das ganz einfach, da die ausgewählte Zeichenkette in der TextBox erscheint.

    Wenn die Elemente der Liste jedoch Objekte mit mehreren Eigenschaft sind, so kann man "DisplayMember" nutzen, um anzugeben, welche Eigenschaft in der Liste angezeigt wird. Wenn man das nicht macht, wird die ToString-Methode des Objektes für die Anzeige genutzt. Wwnn man bei eigenen Objekten da nicht vorgesehen (überschreiben) hat, liefert die ToString-Methode nur die Textdarstellung des Objekttyps.

    Parallel dazu kann man "ValueMember" und "SelectedValue" nutzen, um einen anderen Eigenschaftswert des ausgewählten Objektes für eine Auswahl nutzen, z.B. für die Auswahl einer Identifikation wie beispielsweise ein Fremdschlüsselwert. "ValueMember" spezifiziert den Namen der Eigenschaft der Objekte der Liste und "SelectedValue" liefert den konkreten Wert des asugewählten Objektes.

    --
    Peter

    Sonntag, 14. Dezember 2014 18:56