Speicherabfrage bei geändertem Datarow

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Speicherabfrage bei geändertem Datarow

    Ich möchte bei wechsel einer Datarow prüfen ob an dieser Felder geändert wurden.
    Ein dirty Flag habe ich weder bei der Datarow noch bei Bindingsource.current gefunden.
    Nun habe ich mir schon selber eine Booleanvariable dirty angelegt und die beim Hinzufügen einer datarow auf true gesetzt.
    Beim Speichern frage ich diese ab. Soweit funktioniert es auch ganz gut.
    Wie kann ich das aber beim Wechsel der Datarow bzw Bindingsource.current regeln ?
    Bei welchem Ereignis sind alle Felder gefüllt, so das ich blnDirty = false setzen kann ?
    Die Änderung der einzelnen Felder versuche ich so abzugreifen.

    VB.NET-Quellcode

    1. Private Sub bsAnwendung_CurrentItemChanged(sender As Object, e As EventArgs) Handles bsAnwendung.CurrentItemChanged
    2. blnDirty = True
    3. End Sub
    Danke, aber die greift für das gesamte Dataset, ich möchte aber nur wissen ob sich im Bindingsource.current was geändert hat, bevor ich in die Datenbank zurückschreibe.
    Außerdem ist der Wert bei mir true auch wenn ich aktuell nichts geändert habe.
    Evtl. Helfen dir ja die DataTable Events? Da gibts glaub eins, dass das dir sagt ob es in der DataRow Änderungen gab.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Klappt leider nicht.
    Obwohl ein Feld der Datarow nachweislich geändert wurde, per messagebox.show(DtrowAnwendung.Anwendung) überprüft steht rowstate auf unchanged.
    Setze ich ein bsAnwendung.endedit davor wird es immer modfied.

    VB.NET-Quellcode

    1. Private Sub tvwAnwendungen_NodSelect(sender As Object, e As TreeViewEventArgs) Handles tvwAnwendungen.NodSelect
    2. If Me.bsAnwendung.Current IsNot Nothing Then
    3. dtrowAnwendung = DirectCast(DirectCast(Me.bsAnwendung.Current, DataRowView).Row, dsRechnerliste_be.tbl_AnwendungRow)
    4. MessageBox.Show(dtrowAnwendung.Anwendung)
    5. If dtrowAnwendung.RowState = DataRowState.Modified Then
    6. Select Case MessageBox.Show("Die Anwendung " & Me.txtAnwendung.Text & " wurde noch nicht gespeichert. " & NewLine &
    7. " Wollen Sie diese jetzt speichern ?", "Speicherabfrage", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    8. Case DialogResult.OK
    9. speichern()
    10. Case DialogResult.Cancel
    11. Exit Sub
    12. Case DialogResult.No
    13. bsAnwendung.CancelEdit()
    14. End Select
    15. End If
    16. End If
    17. nodAnwendungen = DirectCast(e.Node, nodAnwendung)
    18. Me.bsAnwendung.Position = Me.bsAnwendung.Find(Rechnerliste.tbl_Anwendung.ID_AnwendungColumn.ColumnName, nodAnwendungen.ID)
    19. If Me.bsAnwendung.Current IsNot Nothing Then
    20. dtrowAnwendung = DirectCast(DirectCast(Me.bsAnwendung.Current, DataRowView).Row, dsRechnerliste_be.tbl_AnwendungRow)
    21. Me.txtBelegt.Text = "0"
    22. If dtrowAnwendung.Gettbl_A_Anwendung_RechnerRows.Count > 0 Then
    23. If Not Me.tabControl.TabPages.Contains(tabRechnerliste) Then
    24. Me.tabControl.TabPages.Add(Me.tabRechnerliste)
    25. End If
    26. Me.txtBelegt.Text = dtrowAnwendung.Gettbl_A_Anwendung_RechnerRows.Count.ToString
    27. Me.lblwas.Text = "Rechner"
    28. Else
    29. If Me.tabControl.TabPages.Contains(tabRechnerliste) Then
    30. Me.tabControl.TabPages.Remove(Me.tabRechnerliste)
    31. End If
    32. End If
    33. If dtrowAnwendung.Gettbl_A_Anwendung_NutzerRows.Count > 0 Then
    34. If Not Me.tabControl.TabPages.Contains(tabNutzerListe) Then
    35. Me.tabControl.TabPages.Add(Me.tabNutzerListe)
    36. End If
    37. Me.txtBelegt.Text = dtrowAnwendung.Gettbl_A_Anwendung_NutzerRows.Count.ToString
    38. Me.lblwas.Text = "Nutzer"
    39. Else
    40. If Me.tabControl.TabPages.Contains(tabNutzerListe) Then
    41. Me.tabControl.TabPages.Remove(Me.tabNutzerListe)
    42. End If
    43. End If
    44. If dtrowAnwendung.IsmaxAnzNull Then
    45. Me.MaxAnzTextBox.Visible = False
    46. Me.lblStrich.Visible = False
    47. Me.lblwas.Location = Me.lblStrich.Location
    48. Else
    49. Me.MaxAnzTextBox.Visible = True
    50. Me.lblStrich.Visible = True
    51. Me.lblwas.Location = intposWas
    52. End If
    53. End If
    54. End Sub