DataBound ListBox gibt kein SelectedItem aus?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Viercnt.

    DataBound ListBox gibt kein SelectedItem aus?

    Guten Abend,

    Ich habe zwei ListBoxen, Die ListBox1 ist per "Use Data Bound Items" an mein Typisiertes DataSet gebunden.
    Genauer, DataSource hab ich per Dropdown mein Table ausgewählt, ist also an die BindingSource gebunden die automatisch generiert wurde, DisplayMember habe ich auf "name", also der Name der Column in der Table, gesetzt.
    ValueMember habe ich ebenfalls auf "name" gesetzt.
    SelectedValue habe ich noch auf None.

    DIe Anzeige meiner Einträge aus der DB in der ListView klappt einwandfrei, Problem ist, wenn ich jetzt bsp. ganz einfach mein "SelectedItem" in einer Messagebox ausgeben will, bekomme ich "System.Data.DataRowView" statt des ausgewählten Eintrages angezeigt.
    Als Gegenprüfung habe ich ein ungebundenes Listview erstellt, da einfach ein Item reingehauen, und das per

    VB.NET-Quellcode

    1. MessageBox.Show(ListBox2.SelectedItem)


    angezeigt, das funktioniert super (Ausgegeben wird das ausgewählte Item). Bei meiner ListView1, kommt eben "System.Data.DataRowView" - aber ich verstehe nicht warum ?(

    ps: .toString hab ich schon probiert - klappt auch nicht :(
    Danke!

    Grüße,
    Kevin

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

    Viercnt schrieb:

    Bei meiner ListBox1, kommt eben "System.Data.DataRowView" - aber ich verstehe nicht warum
    Du musst richtig casten...

    VB.NET-Quellcode

    1. Dim col = DirectCast(DirectCast(ListBox1.SelectedItem, DataRowView).Row, DeineTableRow).DeineColumn

    Aber besser geeignet für solch Visualisierung einer Tabelle wäre ein DGV.

    VB1963 schrieb:

    Viercnt schrieb:

    Bei meiner ListBox1, kommt eben "System.Data.DataRowView" - aber ich verstehe nicht warum
    Du musst richtig casten...

    VB.NET-Quellcode

    1. Dim col = DirectCast(DirectCast(ListBox1.SelectedItem, DataRowView).Row, DeineTableRow).DeineColumn


    und coll wäre dann das, was ich in der MessageBox ausgeben kann? :)

    VB1963 schrieb:


    Aber besser geeignet für solch Visualisierung einer Tabelle wäre ein DGV.


    Bedingt, da ich in der einer Linken ListView halt einfach alle Namen aus einer Spalte der DB anzeigen lassen will, und dann will ich die ausgewählten per Buttonklick in ein zweites Listview übertragen - also um relativ angenehm Namen auszuwählen.
    Da wäre ein DGV doch Quark, oder?
    Danke!

    Grüße,
    Kevin
    @Viercnt In diesem Sinne kannst Du das ListView im Prinzip als ein einspaltiges DataGridView auffassen, wo die eine Spalte dem DisplayMember des ListView entspricht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: also die Anzeige der Elemente in der ListBox(!, kein ListView, glaub da gibts einen Unterscheid) klappt hervorragend, nur eben nicht, wenn ich das SelectedItem per .SelectedItem auslesen möchte (bsp. in einer Messagebox oder sonstwo). In einer manuell befüllten ListBox funktioniert es, per .SelectedItem auch den Namen in einer Messagebox auszugeben - in der DataBound ListBox bekomme ich statt des Textes des SelectedItems nur "System.Data.DataRowView" angezeigt.

    Beim Manuell befüllten funktionierts - beim DataBound one nicht :( Dabei werden in beiden ListBoxen aber die Items richtig angezeigt
    Danke!

    Grüße,
    Kevin

    Viercnt schrieb:

    beim DataBound one nicht
    Kannst Du mal ein Minimalprojekt posten, das den Effekt reproduziert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wird glaub ich schwierig, da ich mein Typisiertes DataSet ja nicht mit exportieren kann?

    Minimal wäre einfach, eine ListBox erstellen, per Pfeil oben an der Listbox "Use DataBound Items", dann bei DataSource die BindingSource des Generierten DataSets, DisplayMember auf eine Zelle und Valuemember Ebenfalls.
    Per Listbox1.SelectedItem lässt sich so nur "System.Data.DataRowView" anzeigen - bei einer händisch befülltem ListBox wird so das SelectedItem ausgegeben :(

    Wenn du mir sagst, wie ich das minimalprojekt machen könnte, ohne ja auf mein typisiertes DataSet angewiesen zu sein, mach ich das gerne :(
    Danke!

    Grüße,
    Kevin

    Viercnt schrieb:

    Da wäre ein DGV doch Quark, oder?
    Nein kein Quark - DGV ist eigens konzipiert für Tabellen und Listbox ist für einspaltige Anzeigen da. Wenn du eine Tabelle in der Listbox anzeigen willst, zeigt sie dir nur die Einträge der Spalte an, die du in der Displaymember-Eigenschaft angegeben hast an. Der ausgewählte Item ist bei einer Tabelle als Datasource halt ein DataRowView-Object (Datenzeile der Tabelle), wo du mit obigen Cast bestimmte Columneinträge herauskitzeln kannst. Oder noch besser, du verwendest zur Ausgabe die .SelectedValue-Eigenschaft. Die enthält den Wert der Spalte, die du in ValueMember angegeben hast...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()