Listbox selektierte Items auslesen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Listbox selektierte Items auslesen

    Hi,

    ich habe eine Listbox, in der mehrere Einträge selektiert werden können.
    Ich möchte nun in einer Funktion alle selektierten Einträge abfragen (genauer gesagt, den Text, den der Anwender auch sieht - DisplayMember)
    Wie komme ich hieran?

    Mein bescheidener total mislungener Versuch war:

    VB.NET-Quellcode

    1. For Each Item As String In Me.ListBox.SelectedItems
    2. Next

    Was aber totaler Humbug ist, da die enthaltenen Items ja kein String sind... -.-*
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    VB.NET-Quellcode

    1. For Each Item As String In Me.ListBox.SelectedItems
    2. MessageBox.Show(Item.ToString)
    3. Next
    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!
    Eben genau das geht leider nicht.

    //Ungültige Konvertierung von Typ DataRowView in Typ String

    hatte ich mir ja (siehe mein Post) auch erst gedacht.

    Edit:
    Ich weiß ja dank der Meldung dass es ne DataRowView gibt, leider finde ich aber keine Möglichkeit aus dieser DataRowView den ensprechenden Text auszulesen, welcher in der Listbox ja angezeigt wird.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Hi fichz,

    danke erstmal, jedoch wirft mir ein

    VB.NET-Quellcode

    1. DirectCast(Item, String)

    die Meldung:
    Das Objekt des Typs "System.Data.DataRowView" kann nicht in Typ "System.String" umgewandelt werden.

    EDIT:
    Ich kann irgendwie mit System.Data.DataRowView so garnichts anfangen. -.-*
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    VB.NET-Quellcode

    1. dim elemente(listbox1.items.count) as string
    2. for i as integer = 0 to listbox1.items.count -1
    3. If listbox1.Items.Item(i).Selected Then
    4. elemente(i) = listbox.items.item(i)
    5. End If
    6. Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sgt. Space“ ()

    MemoAnMichSelbst schrieb:

    Eben genau das geht leider nicht.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. For Each Item As String In Me.ListBox1.SelectedItems
    4. MessageBox.Show(Item.ToString)
    5. Next
    6. End Sub
    7. End Class

    Dann haste iwas ganz falsch gamacht.
    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!
    So,

    Lösung des Ganzen (damit Ihr auch was von meinen Problemchen habt ^^):

    VB.NET-Quellcode

    1. For Each Item In Me.ListBox.SelectedItems
    2. Dim oem As DataRowView
    3. oem = DirectCast(Item, DataRowView)
    4. Dim ErgebnisDesGanzen As String = oem.Row(0).ToString
    5. Next


    PS: Danke für die Hilfe ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Wenn du mir noch sagst was ein "Typisiertes" Dataset für dich ist, sag ich dir ob ich eines verwendet ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Wenn du so antwortest, weißich auch bescheid ;)

    aber fallses dich interessiert: eiglich alles, wassich bei die Datenbank-Tutorials eingestellt hab, basiert auf typisierte Datasets.
    Dabei kommt in kaum einem dieser Tuts eine Datenbank vor - also nicht denken, es sei für dich irrelevant, weil du grad keine DB programmierst.

    Die Databinding-Technologie, die Ado.Net auf die DB-Provider aufsetzt, ist uneingeschränkt verwendbar auch für alle anneren Anwendungen.
    Natürlich hängt an meiner Anwendung eine Datenbank ^^
    Mir sagt nur dieses "typisiert" erstmal nichts.
    Ich befülle ein Dataset, welches ich wiederum verwende um die Listbox zu befüllen.

    Ich steh nur auf dem Schlauch wo der Unterschied von einem typisierten zu einem "normalen?!" Dataset liegt ;)
    Habe es mal gegooglet aber irgendwie keine Erklärung zu dem Unterschied (auf die Schnelle) gefunden.

    Deine Tuts kenne ich natürlich, auch wenn ich nicht immer so arbeite wie du ^^ Vllt wirst auch die Hände überm Kopp zusammen schlagen wenn du siehst was ich da frickel ^^

    Falls es dich interessiert, was ich tue:

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Dim myDA As OleDbDataAdapter
    3. Dim myDataSet As DataSet
    4. Private Sub frmSonderbedingungAuswahl_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    5. Dim con As OleDbConnection = New OleDbConnection(IntConStr)
    6. Dim cmd As OleDbCommand = New OleDbCommand("SELECT Sonderbedingung FROM Pa_Sonderbedingung", con)
    7. con.Open()
    8. myDA = New OleDbDataAdapter(cmd)
    9. Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(myDA)
    10. myDataSet = New DataSet()
    11. myDA.Fill(myDataSet, "MyTable")
    12. ListBox.DataSource = myDataSet.Tables("MyTable").DefaultView
    13. ListBox.DisplayMember = "Sonderbedingung"
    14. con.Close()
    15. con = Nothing
    16. Me.ListBox.ClearSelected()
    17. End Sub
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D