Überprüfen ob sich ein Datatable.rows.item geändert hat

  • VB.NET

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

    Überprüfen ob sich ein Datatable.rows.item geändert hat

    Hallo zusammen,

    ich versuche gerade heraus zu finden welche Items sich in einem Datatable geändert haben.
    Das Datatable hat nur eine row.
    Ich möchte das heraus finden, um zu wissen, was ich auf dem SQL-Server updaten muss.
    (Ich weiß ich könnte auch einfach alle Werte updaten, finde ich aber nicht so schön.)

    Für Datatable.rows gibt es die Methode "GetChanges", aber wie mache ich das pro Item bzw. Cell?

    Ich hoffe Ihr könnt mir weiter helfen.

    Vielen Dank.
    da gibts nix für, und ergibt auch keinen rechten Sinn.

    Konzeptionell sind Dataset und DataAdapter darauf ausgelegt, wenn sie speichern, alles zu speichern, was geändert wurde.
    Dafür verfügt Dataset über seine Änderungsverfolgung.
    Für einzelne Zellwerte schreibt man keinen Extra-Code - willst du Weltmeister im "Aufgeblasene Programme schreiben" werden?

    ah - doch! - theoretisch ist das möglich. Wird eine Datarow geändert, so legt sie mehrere DataRowVersions an. Also man kann auf Datarow.HasVersion prüfen, und dann alle Felder abrufen, in den verschiedenen RowVersions, und gucken, ob die Versionen sich unterscheiden.
    So wirst du bestimmt Weltmeister ;)

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

    Ich habs jetzt mal so versucht:

    VB.NET-Quellcode

    1. Dim Changes As Datatable
    2. Changes = OriginalDatatable.GetChanges(DataRowState.Modified)


    Das Changes Datatable ist aber immer nothing, obwohl es ganz sicher Änderungen gibt.
    Was mache ich falsch?
    Wenn du das sagst wirds wohl so sein.

    Für alle die es trotzdem interessiert, ich habs nun so gelöst:

    VB.NET-Quellcode

    1. Dim NewValue As String
    2. Dim OldValue As String
    3. For Each column As DataColumn In Datatable.columns
    4. NewValue = Datatable.Rows(0).Item(column.ColumnName).ToString
    5. OldValue = Datatable.Rows(0).Item(column.ColumnName, DataRowVersion.Original).ToString
    6. If NewValue.Equals(OldValue) = False Then
    7. 'Was man dann machen möchte
    8. End If
    9. Next
    Vielleicht könnte dich auch sowas intressieren:

    VB.NET-Quellcode

    1. Dim dt As New DataTable
    2. For Each row As DataRow In dt.Rows
    3. ' row.RowState
    4. Next


    Weiter Infos zu: msdn.microsoft.com/de-de/libra…ata.datarow.rowstate.aspx

    Ein DataAdapter arbeitet nach dem RowState jeder Row.
    Wenn du nun für jede einzelne Zelle die änderungen haben möchtest, benötigst du ein Vergleichsobjekt womit du noch die einzelnen Zellen miteinander vergleichst (auser diese haben auch ne State eigenschaft (weiß ich aber nicht))

    mfg