gebundene Combobox in Textbox

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von echnaton.

    gebundene Combobox in Textbox

    hallo
    ich habe mal eine Anfängerfrage an euch.
    Ich habe eine Combobox auf der Form und eine Textbox-
    Die Combo wird gefüllt aus einer Access DB und Ist gebunden an der Tabelle "Bezeichnung"
    Das Füllen der combo ist Problemlos
    Bei Auswahl eines Eintrags soll das ausgewählte Item in einer Textbox erscheinen.
    Es erscheint allerdings nur "System.Data.DataRowView" in der Textbox

    VB.NET-Quellcode

    1. Private Sub cbx_Bezeichnung1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbx_Bezeichnung1.SelectedIndexChanged
    2. If cbx_Bezeichnung1.SelectedIndex = -1 Then Exit Sub
    3. TextBox1.Text = cbx_Bezeichnung1.SelectedItem.ToString
    4. End Sub


    So weise ich das "Item" der Textbox zu
    Kann mir jemand sagen was dort falsch ist.
    Danke schon mal im Vorraus
    SA
    Tja, dass eine ComboBox nicht nur Text aufnehmen kann, siehst Du jetzt. Es kann eben komplexe Items aufnehmen und eine bestimmten Property dieses komplexen Elements anzeigen (Stichwort DisplayMember). Wenn Du die Box mit Access befüllst, kommt also wohl ein DataRowView als Komplexitem raus. Aber Moment, befüllst Du direkt über Access oder über ein DataSet?
    Nun, whatever. Der Weg ist wogl der im Forum berühmt-berüchtigte Doppelcast:

    VB.NET-Quellcode

    1. TextBox1.Text = DirectCast(DirectCast(cbx_Bezeichnung1.SelectedItem, System.Data.DataRowView).Row, TypDeinerTypisiertenRow*).DiePropertyDieDuAnzeigenLassenWillst**

    Dabei musst Du * und ** selber rausfinden, indem Du an der Stelle (Z#3 Deines Codes) einen Haltepunkt setzt und wenn das Programm während der Laufzeit dort stoppt, musst Du eben in cbx_Bezeichnung1.SelectedItem reinschauen, was da geboten wird, bzw. was Du konkret davon brauchst.
    Falls in Deinem Post ein Screenshot war: Der ist "kaputt". Bilder kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.

    btw: Titel bitte anpassen, ist doch sehr schwammig
    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.
    So, nach vielen Fehlversuchen hat es endlich geklappt wie gewüscht.
    Habe nun die Bindungssource im Designer gelöscht und die Tabelle per code gebunden.

    VB.NET-Quellcode

    1. rivate ReadOnly Property BezeichnungBS_TypRow() As BezeichnungRow
    2. Get
    3. If Me.BezeichnungBindingSource.Current IsNot Nothing Then
    4. Return DirectCast(DirectCast(Me.BezeichnungBindingSource.Current, DataRowView).Row, BezeichnungRow)
    5. End If
    6. Return Nothing
    7. End Get
    8. End Property


    dann die combo gefüllt

    VB.NET-Quellcode

    1. With cbx_Bezeichnung1
    2. .DataSource = Nothing
    3. .DataSource = Me.BezeichnungBindingSource
    4. .DisplayMember = "Bezeichnung"
    5. .SelectedIndex = -1
    6. .Text = "Auswahl"
    7. End With


    dann

    VB.NET-Quellcode

    1. TextBox1.Text = DirectCast(DirectCast(cbx_Bezeichnung1.SelectedItem, System.Data.DataRowView).Row, BezeichnungRow).Bezeichnung


    und siehe da es funktioniert.
    Also, Ich sehe es als Fehler an wenn man alles im Designer proggen möchte. Ist zwar weniger code .....aber
    man lernt dabei die Hintergründe nicht warum, weshalb hier oder da etwas passiert.
    Ich werde mir jetzt angewöhnen alles per Code zu machen.
    DirectCast hab ich noch nie benutzt. werde mich daher ausführlich damit befassen
    vielen Dank für den wertvollen Hinweis bzw deine Hilfe

    Gruß
    SA