Prüfen DataSet.hasChanges nach den hinzugefügten ungebundenen Spalten

11/10/2009 - 09:27 von Markus Backhaus | Report spam
Hallo zusammen,
ich habe, um das speichern zu vereinfachen auf eine Join-Abfrage verzichtet,
dafür aber lade ich die fehlenden Daten (KundenName)
über Funktion ins Dataset. Das funktioniert auch gut. Nur Probleme gibt es
beim Prüfen des DataSets, da hier immer den Wert True rauskommt. Das
DataSetwird in der LOad-Prozedur gebildet und anschließend an DataGrid
gebunden. Wie kann ich jetzt prüfen, ob der Anwender etwas geàndert hat? Die
Frage kann ich auch so formulieren: wie kann ich den Stand des DataSets vor
der Manipulation mit ungebundenen Feldern speichern und spàter den Wert
HasChanges abfragen?

dset.Tables.Add(dtbl)
da = New SqlDataAdapter("select * from tbl ,CONN)
da.Fill(dtbl)

'DataSet mit den Daten aus der anderen Tabelle füllen (JoinAbfrage
würde das Speichern schwieriger machen)
Dim KundenName As New DataColumn("Name")
dtbl.Columns.Add(KundenName)
For Each MyDataRow In dtbl.Rows
MyDataRow("Name") = "Mit der Funktion gefüllt"
Next

Me.DataGridView1.DataSource = dtbl

Vielen Dank!
Markus
 

Lesen sie die antworten

#1 Peter Götz
11/10/2009 - 10:16 | Warnen spam
Hallo Markus,

ich habe, um das speichern zu vereinfachen auf eine
Join-Abfrage verzichtet, dafür aber lade ich die fehlenden
Daten (KundenName) über Funktion ins Dataset. Das
funktioniert auch gut. Nur Probleme gibt es beim Prüfen
des DataSets, da hier immer den Wert True rauskommt.



Wo kommt immer True raus?

Das DataSetwird in der LOad-Prozedur gebildet und
anschließend an DataGrid gebunden.



Tatsàchlich das DataGrid oder doch eher das neuere
DataGridView?

Wie kann ich jetzt prüfen, ob der Anwender etwas geàndert
hat?



Schau Dir dazu mal

www.gssg.de -> Visual Basic -> VB.net
-> DataTable / DataView / CurrencyManager
-> DataTable / DataView, RowState

an. Darin siehst Du, wie Du die RowStates Deiner Datensàtze
(DataRow) Deiner DataTables ermitteln und auch veràndern
kannst.

Die Frage kann ich auch so formulieren: wie kann ich den
Stand des DataSets vor der Manipulation mit ungebundenen
Feldern speichern und spàter den Wert HasChanges abfragen?



Die unverànderten Originalwerte der DataRows Deiner DataTables
musst Du nicht explizit speichern, das besorgen Deine DataRows
bzw. die einzelnen Felder der DataRows schon ganz von selbst.

Dim OrgValue as Object = _
DataTable.Rows(x).Item(y, DataRowVersion.Original)

und den aktuellen (geànderten) Wert bekommst Du entsprechend
so:

Dim ActValue as Object = _
DataTable.Rows(x).Item(y, DataRowVersion.Current

Weitere RowStates sind:

DataRowVersion.Default
und
DataRowVersion.Proposed.

Mehr dazu in der Online-Hilfe zur DataRow.Item-Eigenschaft
und zur DataRow-Enumeration.


dset.Tables.Add(dtbl)
da = New SqlDataAdapter("select * from tbl ,CONN)
da.Fill(dtbl)

'DataSet mit den Daten aus der anderen Tabelle füllen
(JoinAbfrage würde das Speichern schwieriger machen)
Dim KundenName As New DataColumn("Name")
dtbl.Columns.Add(KundenName)
For Each MyDataRow In dtbl.Rows
MyDataRow("Name") = "Mit der Funktion gefüllt"
Next

Me.DataGridView1.DataSource = dtbl



Wenn Du eine DataTable an das DataGridView bindest, dann
ist die eigentliche DataSource nicht die DataTable, sondern eine
implizit erstellte DataView. Du kannst aber auch gleich selbst
eine DataView erstellen und diese dann an das DGV binden:

Dim DT as DataTable
Dim DV as DataView

DV = new DataView(DT)
DataGridView1.DataSource = DV

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen