Bindingssoure löscht falschen Datensatz

  • VB.NET
  • .NET (FX) 4.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Bindingssoure löscht falschen Datensatz

    Hallo und guten Abend zusammen.

    Beschäftige mich seit zwei Tagen mit dem gleichen Problem.
    Binde wechselnde Datenquellen an ein DGV.

    Problem 1:
    Bei der Datensatzlöschung wird immer der erste Datensatz des DGV und nicht der markierte Datensatz gelöscht.

    Problem 2:
    Möchte ich nach der Neuanlage eines Datensatzes diesen wieder löschen, erhalte ich eine Parallelitätsverletzung.




    Spoiler anzeigen

    VB.NET-Quellcode

    1. Me.DGV_Dokumente.DataSource = Nothing
    2. Me.DGV_Dokumente.Rows.Clear()
    3. Dokumente.Filterdaten = New DataView
    4. Dokumente.DataQuelle = New BindingSource
    5. If Me.DatenModus = "A" Then
    6. Dim FilterAlle = From order In Dokumente.DataTabelle.AsEnumerable()
    7. Where order.Field(Of Integer)("Nummer") > 100000
    8. Select order
    9. Dokumente.Filterdaten = FilterAlle.AsDataView
    10. Dokumente.DataQuelle.DataSource = Dokumente.Filterdaten
    11. End If
    12. If Me.DatenModus = "B" Then
    13. Dim FilterBrief = From order In Dokumente.DataTabelle.AsEnumerable()
    14. Where order.Field(Of Boolean)("Brief") = True
    15. Select order
    16. Dokumente.Filterdaten = FilterBrief.AsDataView
    17. Dokumente.DataQuelle.DataSource = Dokumente.Filterdaten
    18. End If
    19. If Me.DatenModus = "F" Then
    20. Dim FilterFax = From order In Dokumente.DataTabelle.AsEnumerable()
    21. Where order.Field(Of Boolean)("Fax") = True
    22. Select order
    23. Dokumente.Filterdaten = FilterFax.AsDataView
    24. Dokumente.DataQuelle.DataSource = Dokumente.Filterdaten
    25. End If
    26. With Me.DGV_Dokumente
    27. .DataSource = Dokumente.DataQuelle.DataSource
    28. .SelectionMode = DataGridViewSelectionMode.FullRowSelect
    29. .EnableHeadersVisualStyles = False
    30. .Columns("ID").Visible = False
    31. .Columns("Type").Visible = False
    32. .Columns("Vorlagennummer").Visible = False
    33. .Columns("Aktenummer").Visible = False
    34. .Columns("Kontaktnummer").Visible = False
    35. .Columns("Speichername").Visible = False
    36. .Columns("Brief").Visible = False
    37. .Columns("Fax").Visible = False
    38. .Columns("Email").Visible = False
    39. .Columns("Betreff").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    40. .Columns("Bezeichnung").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    41. .Columns("Datum").DefaultCellStyle.Format = "d"
    42. End With


    Hier nun das Löschen

    VB.NET-Quellcode

    1. If Vorgang = "L" Then ' Löschung
    2. Dokumente.Speicherdatei = Dokumente.Pfad & Me.DGV_Dokumente.CurrentRow.Cells("Speichername").Value.ToString
    3. ' If IO.File.Exists(Dokumente.Speicherdatei) Then IO.File.Delete(Dokumente.Speicherdatei)
    4. ' Me.DGV_Dokumente.Rows.Remove(Me.DGV_Dokumente.CurrentRow) 'Funktioniert
    5. Me.DGV_Dokumente.EndEdit()
    6. Dokumente.DataQuelle.RemoveCurrent()
    7. 'Me.Validate()
    8. 'Dokumente.Speichern()
    9. Me.Bearbeitung_Cleaing()
    10. End If




    Gruß Markus
    Habe nun eine frische Form erstellt mit einem DGV und nichts manipuliert.

    VB.NET-Quellcode

    1. Public Class Test_DGV
    2. Private Sub Test_DGV_Load(sender As Object, e As EventArgs) Handles Me.Load
    3. Dokumente = New MBC_MBSOFT.CDokumente
    4. With Dokumente
    5. .Datenverbindung = New OleDb.OleDbConnection(Daten.Verbindungsstring_MBSOFT)
    6. .VerbindungsAuftrag = "Select * From Dokumente"
    7. .MitBinding = True
    8. .PrimKeyName = "ID"
    9. .Initalisieren()
    10. End With
    11. Me.DGV.DataSource = Dokumente.DataQuelle.DataSource
    12. End Sub
    13. Private Sub TS_Aus_Click(sender As Object, e As EventArgs) Handles TS_Aus.Click
    14. Me.Close()
    15. End Sub
    16. Private Sub TS_Loeschen_Click(sender As Object, e As EventArgs) Handles TS_Loeschen.Click
    17. Dokumente.DataQuelle.RemoveCurrent()
    18. End Sub
    19. End Class


    Es wird weiterhin der erste Datensatz im DGV gelöscht.
    Vielleicht liegt es an der Daten-Lesung. Habe diese automatisiert.

    VB.NET-Quellcode

    1. Public Sub Initalisieren()
    2. Me.IstInitalisiert = False
    3. If Me.Nummer_Feld = Nothing Then Me.Nummer_Feld = "Nummer"
    4. If Me.Datenverbindung Is Nothing Then Me.Datenverbindung = New OleDbConnection(Daten.Verbindungsstring_MBSOFT)
    5. DataAdapter = New OleDb.OleDbDataAdapter(Me.VerbindungsAuftrag, Me.Datenverbindung)
    6. DataBuilder = New OleDb.OleDbCommandBuilder(DataAdapter)
    7. DataBuilder.QuotePrefix = "["
    8. DataBuilder.QuoteSuffix = "]"
    9. DataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
    10. DataTabelle = New DataTable
    11. DataAdapter.FillSchema(DataTabelle, SchemaType.Mapped)
    12. DataAdapter.Fill(DataTabelle)
    13. If Not Me.PrimKeyName = Nothing Then DataTabelle.PrimaryKey = New DataColumn() {DataTabelle.Columns(Me.PrimKeyName)}
    14. TabellenName = DataTabelle.TableName
    15. If Me.MitBinding Then DataQuelle.DataSource = DataTabelle
    16. DataZeile = DataTabelle.NewRow
    17. IstInitalisiert = True
    18. WurdeInitalisiert = True
    19. If Not DataTabelle.Rows.Count < 1 Then WertZeile = DataTabelle.Rows(0)
    20. MeinInstall()
    21. End Sub


    Denke ich habe den Fehler gefunden:
    Falsch: Me.DGV.DataSource = Dokumente.DataQuelle.DataSource
    Richtig: Me.DGV.DataSource = Dokumente.DataQuelle
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()