DataSet.GetChanges Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u een kopie op van alle DataSet wijzigingen die eraan zijn aangebracht, omdat deze voor het laatst is geladen of omdat AcceptChanges() deze is aangeroepen.
Overloads
| Name | Description |
|---|---|
| GetChanges() |
Hiermee haalt u een kopie op van de DataSet kopie die alle wijzigingen bevat die eraan zijn aangebracht, omdat deze is geladen of sinds AcceptChanges() de laatste aangeroepen. |
| GetChanges(DataRowState) |
Hiermee haalt u een kopie op van het DataSet bestand met alle wijzigingen die zijn aangebracht sinds deze voor het laatst is geladen of omdat AcceptChanges() deze is aangeroepen, gefilterd op DataRowState. |
GetChanges()
Hiermee haalt u een kopie op van de DataSet kopie die alle wijzigingen bevat die eraan zijn aangebracht, omdat deze is geladen of sinds AcceptChanges() de laatste aangeroepen.
public:
System::Data::DataSet ^ GetChanges();
public System.Data.DataSet GetChanges();
member this.GetChanges : unit -> System.Data.DataSet
Public Function GetChanges () As DataSet
Retouren
Een kopie van de wijzigingen hiervan DataSet die er acties op kunnen uitvoeren en later weer kunnen worden samengevoegd met behulp van Merge(DataSet). Als er geen gewijzigde rijen worden gevonden, retourneert nullde methode .
Voorbeelden
In het volgende voorbeeld wordt een eenvoudige DataSet tabel, twee kolommen en tien rijen gemaakt. Er worden twee waarden gewijzigd en er wordt één rij toegevoegd. Er wordt een subset van de gewijzigde gegevens gemaakt met behulp van de GetChanges methode. Na het afstemmen van fouten wordt een nieuwe kolom toegevoegd aan de subset, waardoor het schema wordt gewijzigd. Wanneer de Merge methode met de missingSchemaAction set wordt aangeroepen MissingSchemaAction.Add, wordt de nieuwe kolom toegevoegd aan het schema van het oorspronkelijke DataSet object.
private void DemonstrateMerge()
{
// Create a DataSet with one table, two columns,
// and three rows.
DataSet dataSet = new DataSet("dataSet");
DataTable table = new DataTable("Items");
DataColumn idColumn = new DataColumn("id",
Type.GetType("System.Int32"),"");
idColumn.AutoIncrement=true;
DataColumn itemColumn = new DataColumn("Item",
Type.GetType("System.Int32"),"");
// DataColumn array to set primary key.
DataColumn[] keyColumn= new DataColumn[1];
DataRow row;
// Create variable for temporary DataSet.
DataSet changesDataSet;
// Add RowChanged event handler for the table.
table.RowChanged+=new DataRowChangeEventHandler(
Row_Changed);
dataSet.Tables.Add(table);
table.Columns.Add(idColumn);
table.Columns.Add(itemColumn);
// Set primary key column.
keyColumn[0]= idColumn;
table.PrimaryKey=keyColumn;
// Add ten rows.
for(int i = 0; i <10;i++)
{
row=table.NewRow();
row["Item"]= i;
table.Rows.Add(row);
}
// Accept changes.
dataSet.AcceptChanges();
PrintValues(dataSet, "Original values");
// Change row values.
table.Rows[0]["Item"]= 50;
table.Rows[1]["Item"]= 111;
// Add one row.
row=table.NewRow();
row["Item"]=74;
table.Rows.Add(row);
// Insert code for error checking. Set one row in error.
table.Rows[1].RowError= "over 100";
PrintValues(dataSet, "Modified and New Values");
// If the table has changes or errors,
// create a subset DataSet.
if(dataSet.HasChanges(DataRowState.Modified |
DataRowState.Added)&& dataSet.HasErrors)
{
// Use GetChanges to extract subset.
changesDataSet = dataSet.GetChanges(
DataRowState.Modified|DataRowState.Added);
PrintValues(changesDataSet, "Subset values");
// Insert code to reconcile errors. In this case, reject changes.
foreach(DataTable changesTable in changesDataSet.Tables)
{
if (changesTable.HasErrors)
{
foreach(DataRow changesRow in changesTable.Rows)
{
//Console.WriteLine(changesRow["Item"]);
if((int)changesRow["Item",DataRowVersion.Current ]> 100)
{
changesRow.RejectChanges();
changesRow.ClearErrors();
}
}
}
}
// Add a column to the changesDataSet.
changesDataSet.Tables["Items"].Columns.Add(
new DataColumn("newColumn"));
PrintValues(changesDataSet, "Reconciled subset values");
// Merge changes back to first DataSet.
dataSet.Merge(changesDataSet, false,
System.Data.MissingSchemaAction.Add);
}
PrintValues(dataSet, "Merged Values");
}
private void Row_Changed(object sender, DataRowChangeEventArgs e)
{
Console.WriteLine("Row Changed " + e.Action.ToString()
+ "\table" + e.Row.ItemArray[0]);
}
private void PrintValues(DataSet dataSet, string label)
{
Console.WriteLine(label + "\n");
foreach(DataTable table in dataSet.Tables)
{
Console.WriteLine("TableName: " + table.TableName);
foreach(DataRow row in table.Rows)
{
foreach(DataColumn column in table.Columns)
{
Console.Write("\table " + row[column] );
}
Console.WriteLine();
}
}
}
Private Sub DemonstrateMerge()
' Create a DataSet with one table, two columns,
' and three rows.
Dim dataSet As New DataSet("dataSet")
Dim table As New DataTable("Items")
Dim idColumn As New DataColumn("id", _
Type.GetType("System.Int32"), "")
idColumn.AutoIncrement = True
Dim itemColumn As New DataColumn("Item", _
Type.GetType("System.Int32"), "")
' Create DataColumn array to set primary key.
Dim keyColumn(0) As DataColumn
Dim row As DataRow
' Create variable for temporary DataSet.
Dim changesDataSet As DataSet
' Add RowChanged event handler for the table.
AddHandler table.RowChanged, AddressOf Row_Changed
dataSet.Tables.Add(table)
table.Columns.Add(idColumn)
table.Columns.Add(itemColumn)
' Set primary key column.
keyColumn(0) = idColumn
table.PrimaryKey = keyColumn
' Add ten rows.
Dim i As Integer
For i = 0 To 9
row = table.NewRow()
row("Item") = i
table.Rows.Add(row)
Next i
' Accept changes.
dataSet.AcceptChanges()
PrintValues(dataSet, "Original values")
' Change row values.
table.Rows(0)("Item") = 50
table.Rows(1)("Item") = 111
' Add one row.
row = table.NewRow()
row("Item") = 74
table.Rows.Add(row)
' Insert code for error checking. Set one row in error.
table.Rows(1).RowError = "over 100"
PrintValues(dataSet, "Modified and New Values")
' If the table has changes or errors, create a subset DataSet.
If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _
And dataSet.HasErrors Then
' Use GetChanges to extract subset.
changesDataSet = dataSet.GetChanges( _
DataRowState.Modified Or DataRowState.Added)
PrintValues(changesDataSet, "Subset values")
' Insert code to reconcile errors. In this case, reject changes.
Dim changesTable As DataTable
For Each changesTable In changesDataSet.Tables
If changesTable.HasErrors Then
Dim changesRow As DataRow
For Each changesRow In changesTable.Rows
'Console.WriteLine(changesRow["Item"]);
If CInt(changesRow("Item", _
DataRowVersion.Current)) > 100 Then
changesRow.RejectChanges()
changesRow.ClearErrors()
End If
Next changesRow
End If
Next changesTable
' Add a column to the changesDataSet.
changesDataSet.Tables("Items").Columns.Add( _
New DataColumn("newColumn"))
PrintValues(changesDataSet, "Reconciled subset values")
' Merge changes back to first DataSet.
dataSet.Merge(changesDataSet, False, _
System.Data.MissingSchemaAction.Add)
End If
PrintValues(dataSet, "Merged Values")
End Sub
Private Sub Row_Changed(sender As Object, e As DataRowChangeEventArgs)
Console.WriteLine("Row Changed " + e.Action.ToString() _
+ ControlChars.Tab + e.Row.ItemArray(0).ToString())
End Sub
Private Sub PrintValues(dataSet As DataSet, label As String)
Console.WriteLine(label + ControlChars.Cr)
Dim table As DataTable
For Each table In dataSet.Tables
Console.WriteLine("TableName: " + table.TableName)
Dim row As DataRow
For Each row In table.Rows
Dim column As DataColumn
For Each column In table.Columns
Console.Write(ControlChars.Tab & " " _
& row(column).ToString())
Next column
Console.WriteLine()
Next row
Next table
End Sub
Opmerkingen
Hiermee maakt u een nieuwe DataSet die een kopie bevat van alle rijen in het origineel DataSet waarvoor wijzigingen in behandeling zijn. Relatiebeperkingen kunnen ertoe leiden dat extra ongewijzigde rijen aan de nieuwe DataSet worden toegevoegd als de ongewijzigde rijen primaire sleutels bevatten die overeenkomen met refererende sleutels in de gewijzigde rijen. De methode retourneert null als er geen rijen in het origineel DataSet staan die wachten op wijzigingen.
Zie ook
Van toepassing op
GetChanges(DataRowState)
Hiermee haalt u een kopie op van het DataSet bestand met alle wijzigingen die zijn aangebracht sinds deze voor het laatst is geladen of omdat AcceptChanges() deze is aangeroepen, gefilterd op DataRowState.
public:
System::Data::DataSet ^ GetChanges(System::Data::DataRowState rowStates);
public System.Data.DataSet GetChanges(System.Data.DataRowState rowStates);
member this.GetChanges : System.Data.DataRowState -> System.Data.DataSet
Public Function GetChanges (rowStates As DataRowState) As DataSet
Parameters
- rowStates
- DataRowState
Een van de DataRowState waarden.
Retouren
Een gefilterde kopie van de DataSet kopie waarop acties kunnen worden uitgevoerd en vervolgens weer worden samengevoegd met behulp van Merge(DataSet). Als er geen rijen van het gewenste bestand DataRowState worden gevonden, retourneert nullde methode .
Voorbeelden
In het volgende voorbeeld wordt de GetChanges methode gebruikt om een tweede DataSet object te maken, dat vervolgens wordt gebruikt om een gegevensbron bij te werken.
private void UpdateDataSet(DataSet dataSet)
{
// Check for changes with the HasChanges method first.
if(!dataSet.HasChanges(DataRowState.Modified)) return;
// Create temporary DataSet variable and
// GetChanges for modified rows only.
DataSet tempDataSet =
dataSet.GetChanges(DataRowState.Modified);
// Check the DataSet for errors.
if(tempDataSet.HasErrors)
{
// Insert code to resolve errors.
}
// After fixing errors, update the data source with
// the DataAdapter used to create the DataSet.
adapter.Update(tempDataSet);
}
Private Sub UpdateDataSet(ByVal dataSet As DataSet)
' Check for changes with the HasChanges method first.
If Not dataSet.HasChanges(DataRowState.Modified) Then
Exit Sub
End If
' Create temporary DataSet variable and
' GetChanges for modified rows only.
Dim tempDataSet As DataSet = _
dataSet.GetChanges(DataRowState.Modified)
' Check the DataSet for errors.
If tempDataSet.HasErrors Then
' Insert code to resolve errors.
End If
' After fixing errors, update the data source with
' the DataAdapter used to create the DataSet.
adapter.Update(tempDataSet)
End Sub
Opmerkingen
De GetChanges methode wordt gebruikt om een tweede DataSet object te produceren dat alleen de wijzigingen bevat die in het origineel zijn geïntroduceerd. Gebruik het rowStates argument om op te geven welk type wijzigingen het nieuwe object moet bevatten.
Deze geretourneerde kopie is ontworpen om terug te worden samengevoegd in dit origineel DataSet. Relatiebeperkingen kunnen ertoe leiden dat bovenliggende rijen die zijn gemarkeerd Unchanged , worden opgenomen. Als er geen rijen van het gewenste bestand DataRowState worden gevonden, retourneert nullde GetChanges methode .