Non avendo ricevuto risposta, io c'ho provato a modo mio...temo non sia la soluzione migliore, quindi, se qualcuno avesse voglia di darmi qualche dritta...ben venga:
codice:'********************* PREPARAZIONE DEI DATI ********************* Dim MyPrimaryKey(0) As DataColumn Dim dt1 As New DataTable Dim dt2 As New DataTable Dim dt3 As New DataTable Dim a As Integer = 0 'Creo due DataTable identici con gli stessi dati dt1.Columns.Add("ID", Type.GetType("System.Int32")) dt1.Columns.Add("NAME", Type.GetType("System.String")) dt2.Columns.Add("ID", Type.GetType("System.Int32")) dt2.Columns.Add("NAME", Type.GetType("System.String")) For i As Integer = 0 To 2 dt1.NewRow() dt2.NewRow() dt1.Rows.Add(New Object() {i, "NAME" & i}) dt2.Rows.Add(New Object() {i, "NAME" & i}) Next 'Imposto il PrimaryKey per entrambi i DataTable MyPrimaryKey(0) = dt1.Columns("ID") dt1.PrimaryKey = MyPrimaryKey MyPrimaryKey(0) = dt2.Columns("ID") dt2.PrimaryKey = MyPrimaryKey dt1.AcceptChanges() dt2.AcceptChanges() 'Simulo delle modifiche (esterne) al Database, rappresentate dal Datatable dt2 '(modifico la riga 2, elimino la riga 3 ed aggiungo una riga) dt2.Rows(1).Item(1) = 10 dt2.Rows(2).Delete() dt2.NewRow() dt2.Rows.Add(New Object() {3, "PROVA"}) dt2.AcceptChanges() '******************* FINE PREPARAZIONE DEI DATI ****************** 'In un nuovo DataTable dt3, "mischio" i dati contenuti nel vecchio DataTable dt1 con quelli del 'nuovo DataTable dt2. Il Merge, non elimina dalla tabella di destinazione le righe mancanti 'dalla tabella di origine, ma non fa altro che aggiungere le righe aggiunte e modificare le righe 'esistenti dt3 = dt1.Copy dt3.Merge(dt2) dt3.AcceptChanges() 'Ciclo sul nuovo datatable aggiornato For Each dr As DataRow In dt3.Rows 'Cerco nel vecchio datatable... Dim drV As DataRow = dt1.Rows.Find(dr(0)) If drV Is Nothing Then '...se non lo trovo, la riga è stata aggiunta dr.SetAdded() Else '...altrimenti, cerco nel nuovo DataTable... Dim drN As DataRow = dt2.Rows.Find(dr(0)) If drN Is Nothing Then '...se la riga non è stata trovata, è stata eliminata dr.Delete() Else '...altrimenti, verifico se è stata modificata... Dim comparer As IEqualityComparer(Of DataRow) = DataRowComparer.Default Dim bEqual As Boolean = comparer.Equals(drN, drV) If Not bEqual Then dr.SetModified() End If End If Next 'Tramite GetChanges ottengo solo le righe eliminate/modificate/aggiunte per le quali, la proprietà '"RowState" mi dice se la riga è stata eliminata/modificata/aggiunta dt3 = dt3.GetChanges

Rispondi quotando