Auswahl aus ListBox löschen

  • VB.NET

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

    Auswahl aus ListBox löschen

    Hallo ihr Profis,

    ich bin leider ein Anfänger in VB-Datenbankprogrammierung und hoffe, das ihr mir helfen könnt.

    Mit folgendem Code wähle ich eine Zeile in der Listbox Sensorlist durch klicken auf einen Button zu der Listbox Sensoren hinzu:

    VB.NET-Quellcode

    1. Private Sub Button_Auswaehlen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Auswaehlen.Click
    2. If Trim(TextBox_Sensor_Kommentar.Text) = "" Then
    3. MsgBox("Kommentarfeld muss gefüllt sein", MsgBoxStyle.Information)
    4. Else
    5. Dim Zusatz_Sensor As DataRow = Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.NewRow()
    6. Zusatz_Sensor("Caption") = ListBox_Sensorliste.SelectedItem("SENSOR_KURZANGABE").ToString & " - " & TextBox_Sensor_Kommentar.Text
    7. Zusatz_Sensor("PKEY") = ListBox_Sensorliste.SelectedItem("SENSOR_KEY")
    8. Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.Rows.Add(Zusatz_Sensor)
    9. WF_02_Pflegemaske.ListBox_Sensoren.Update()
    10. Me.Close()
    11. End If
    12. End Sub


    Jetzt möchte ich die Möglichkeit haben zugefügte und bereits enthaltene Sensoren wieder zu entfernen:

    VB.NET-Quellcode

    1. Private Sub Button_Temperfassung_Entfernen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Temperfassung_Entfernen.Click
    2. Dim n As Integer = ListBox_Sensoren.SelectedItem("PKEY")
    3. Dim Gewaehlter_Sensor As DataRow = Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.Item(n)
    4. Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.Rows.Remove(Gewaehlter_Sensor)
    5. End Sub


    Könnte mir hier jemand behilflich sein? Wäre echt super!



    Gruß,

    Huuut


    Edit by Dodo:
    Nächstes Mal bitte deinen Post editieren.
    -> Überarbeiteten VB Code eingefügt

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

    Das habe ich auch schon versucht, bekomme aber folgende Fehlermeldung:

    ArgumentException wurde nicht behandelt.
    Die Items-Auflistung kann nicht geändert werden, wenn die DataSource-Eigenschaft festgelegt ist.


    Ich hätte noch eine Anmerkung.
    Bisher habe ich immer die remove()-Eigenschaft benutzt, möchte aber, da sich die Daten in einem DataSet befinden die delete()-Eigenschaft verwenden. Erst beim Speichern werden dann die Daten in der SQL-Datenbank gepeichert.

    Danke.


    Edit by Dodo:
    Bitte keine Doppelpostings, nutze die Editierfunktion.
    -> Posts zusammengefügt

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

    du hast ein typisiertes Dataset.
    Das hat auch typisierte Methoden, und die solltest du gaaaanz bevorzugt auch benutzen.

    VB.NET-Quellcode

    1. Private Sub Button_Auswaehlen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Auswaehlen.Click
    2. If Trim(TextBox_Sensor_Kommentar.Text) = "" Then
    3. MsgBox("Kommentarfeld muss gefüllt sein", MsgBoxStyle.Information)
    4. Else
    5. Dim Zusatz_Sensor = Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.NewRow()
    6. Zusatz_Sensor.Caption = ListBox_Sensorliste.SelectedItem("SENSOR_KURZANGABE").ToString & " - " & TextBox_Sensor_Kommentar.Text
    7. Zusatz_Sensor.PKEY = ListBox_Sensorliste.SelectedItem("SENSOR_KEY")
    8. Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.AddspSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_KurzangabeRow(Zusatz_Sensor)
    9. WF_02_Pflegemaske.ListBox_Sensoren.Update()
    10. Me.Close()
    11. End If
    12. End Sub
    natürlich kriegt man allerdings in kürzester Zeit Gehirnkrebs, wenn man seine Datenbank-Objekte mit so klingenden Namen wie "spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe" benennt - dein Bildschirm ist schon 2 meter breit, oder? ;)

    Die Combo- oder List-Boxen sollteste nicht über die Items-Collection befüllen, sondern über eine BindingSource an die passende DataTable binden.

    Dann löscht sich ein angewählter Datensatz einfach mit

    VB.NET-Quellcode

    1. BindingSource.RemoveCurrent


    Zu Databinding gugge 4Views, oder (animiert) "JoiningView.zip" auf Movie-Tuts
    Danke für deine Antwort, allerdings funktioniert der Code nicht so, wie er sollte.

    Vermutlich habe ich noch mehr falsch gemacht.
    Vielleicht könntest du mir helfen, wenn ich mein Problem genauer erkläre.

    Mit folgendem Code lade ich die Listbox_Sensorliste:

    VB.NET-Quellcode

    1. Private Sub auswahl_sensor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. 'TODO: This line of code loads data into the 'DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_JOIN_SELECT' table. You can move, or remove it, as needed.
    3. 'Füllen der Sensor-Tabelle
    4. Dim sql2 As String = "SELECT SENSOR_KEY, SENSOR_KURZANGABE FROM TAB_SENSOR ORDER BY SENSOR_KURZANGABE"
    5. Dim tbsucsensor As New System.Data.DataTable
    6. Using de As New SqlDataAdapter(sql2, My.ConnectionString)
    7. de.Fill(tbsucsensor)
    8. End Using
    9. Me.ListBox_Sensorliste.DataSource = tbsucsensor
    10. Me.ListBox_Sensorliste.DisplayMember = "SENSOR_KURZANGABE"
    11. End Sub


    Mit diesem Sub soll der ausgewählte Sensor aus der Listbox_Sensorliste in die Listbox_Sensoren übertragen werden, aber auch in die Datatable.

    VB.NET-Quellcode

    1. Private Sub Button_Auswaehlen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Auswaehlen.Click
    2. If Trim(TextBox_Sensor_Kommentar.Text) = "" Then
    3. MsgBox("Kommentarfeld muss gefüllt sein", MsgBoxStyle.Information)
    4. Else
    5. Dim Zusatz_Sensor = Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.NewRow()
    6. Zusatz_Sensor("Caption") = ListBox_Sensorliste.SelectedItem("SENSOR_KURZANGABE").ToString & " - " & TextBox_Sensor_Kommentar.Text
    7. Zusatz_Sensor("PKEY") = ListBox_Sensorliste.SelectedItem("SENSOR_KEY")
    8. Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.AddspSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_KurzangabeRow(Zusatz_Sensor) WF_02_Pflegemaske.ListBox_Sensoren.Update()
    9. Me.Close()
    10. End If


    Durch den folgenden Sub sollen die in der Listbox_Sensoren stehenden Sendoren wieder gelöscht werden - zunächst einmal im Dataset:

    VB.NET-Quellcode

    1. Private Sub Button_Temperfassung_Entfernen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Temperfassung_Entfernen.Click
    2. Dim n = ListBox_Sensoren.SelectedItem()
    3. Me.DataSet_LED1_Motorendatenbank.spSENSOR_BAUREIHE_SELECT_SENSOR_LIST_BY_Kurzangabe.Rows.Remove(n)
    4. Me.ListBox_Sensoren.Update()
    5. End Sub


    Endgültig gespeichert werden soll das dann durch folgenden Sub:

    VB.NET-Quellcode

    1. Private Sub Speicherfunktion()
    2. Me.SpSENSOR_BAUREIHE_SELECT_BY_KurzangabeBindingSource.EndEdit()
    3. Me.TableAdapterManager.UpdateAll(Me.DataSet_LED1_Motorendatenbank)
    4. End Sub


    Könntest du mir da bitte helfen? Wäre wirklich super!
    Vermutlich habe ich da einiges falsch.

    Gruß, Huuut
    der ganze Ansatz ist eine komische Mischung aus typisierten und untypisierten Dataset.
    Und ListBox_Sensorliste sollteste, wie gesagt, über BindingSource an eine DataTable deines typDatasets binden, nicht an eine jedesmal neu zu befüllende untypisierte DataTable.

    VB.NET-Quellcode

    1. Me.ListBox_Sensoren.Update()
    ist üflüssig, eine gebundene Listbox updated sich selbst.

    wie man einen aktuellen Datensatz löscht, schrieb ich bereits.