Stati e versioni delle righeRow States and Row Versions

In ADO.NET le righe delle tabelle vengono gestite tramite gli stati e le versioni delle righe.ADO.NET manages rows in tables using row states and versions. Lo stato di una riga indica lo stato corrente di una particolare riga. Le versioni delle righe consentono di mantenere i valori archiviati in una riga durante le modifiche. Vengono conservati anche i valori correnti, originali e predefiniti.A row state indicates the status of a row; row versions maintain the values stored in a row as it is modified, including current, original, and default values. Ad esempio, dopo aver apportato una modifica in una colonna di una riga, lo stato della riga sarà impostato su Modified e saranno disponibili due versioni, ovvero Current, che contiene i valori correnti della riga, e Original, che contiene i valori della riga prima della modifica della colonna.For example, after you have made a modification to a column in a row, the row will have a row state of Modified, and two row versions: Current, which contains the current row values, and Original, which contains the row values before the column was modified.

A ogni oggetto DataRow è assegnata una proprietà RowState, che è possibile esaminare per determinare lo stato corrente della riga.Each DataRow object has a RowState property that you can examine to determine the current state of the row. Nella tabella seguente viene fornita una breve descrizione di ogni valore dell'enumerazione RowState.The following table gives a brief description of each RowState enumeration value.

Valore di RowStateRowState value DescrizioneDescription
Unchanged Non è stata apportata alcuna modifica rispetto all'ultima chiamata a AcceptChanges o alla creazione della riga da parte di DataAdapter.Fill.No changes have been made since the last call to AcceptChanges or since the row was created by DataAdapter.Fill.
Added La riga è stata aggiunta alla tabella, ma AcceptChanges non è stato chiamato.The row has been added to the table, but AcceptChanges has not been called.
Modified Alcuni elementi della riga sono stati modificati.Some element of the row has been changed.
Deleted La riga è stata eliminata da una tabella e AcceptChanges non è stato chiamato.The row has been deleted from a table, and AcceptChanges has not been called.
Detached La riga non fa parte di alcun oggetto DataRowCollection.The row is not part of any DataRowCollection. Il valore di RowState di una riga appena creata viene impostato su Detached.The RowState of a newly created row is set to Detached. Dopo l'aggiunta della nuova DataRow al DataRowCollection tramite la chiamata al metodo Add, il valore della proprietà RowState viene impostato su Added.After the new DataRow is added to the DataRowCollection by calling the Add method, the value of the RowState property is set to Added.

Il valore Detached viene impostato anche per una riga rimossa da un DataRowCollection mediante il metodo Remove oppure mediante il metodo Delete seguito dal metodo AcceptChanges.Detached is also set for a row that has been removed from a DataRowCollection using the Remove method, or by the Delete method followed by the AcceptChanges method.

Quando AcceptChanges viene chiamato su un oggetto DataSet, DataTable o DataRow, tutte le righe il cui stato corrisponde a Deleted vengono rimosse.When AcceptChanges is called on a DataSet, DataTable , or DataRow, all rows with a row state of Deleted are removed. Alle righe rimanenti viene assegnato lo stato Unchanged e i valori con versione di riga Original vengono sovrascritti dai valori con versione di riga Current.The remaining rows are given a row state of Unchanged, and the values in the Original row version are overwritten with the Current row version values. Quando RejectChanges viene chiamato, tutte le righe il cui stato corrisponde a Added vengono rimosse.When RejectChanges is called, all rows with a row state of Added are removed. Alle righe rimanenti viene assegnato lo stato Unchanged e i valori con versione di riga Current vengono sovrascritti dai valori con versione di riga Original.The remaining rows are given a row state of Unchanged, and the values in the Current row version are overwritten with the Original row version values.

È possibile visualizzare le diverse versioni di una riga passando un parametro DataRowVersion contenente il riferimento alla colonna, come illustrato nell'esempio seguente.You can view the different row versions of a row by passing a DataRowVersion parameter with the column reference, as shown in the following example.

Dim custRow As DataRow = custTable.Rows(0)  
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()  
DataRow custRow = custTable.Rows[0];  
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();  

Nella tabella seguente viene fornita una breve descrizione di ogni valore dell'enumerazione DataRowVersion.The following table gives a brief description of each DataRowVersion enumeration value.

Valore di DataRowVersionDataRowVersion value DescrizioneDescription
Current Valori correnti della riga.The current values for the row. Questa versione di riga non è disponibile per le righe in cui il valore di RowState è Deleted.This row version does not exist for rows with a RowState of Deleted.
Default Versione di riga predefinita per una particolare riga.The default row version for a particular row. La versione predefinita per una riga Added, Modified o Deleted è Current.The default row version for an Added, Modified, or Deleted row is Current. La versione predefinita per una riga Detached è Proposed.The default row version for a Detached row is Proposed.
Original Valori originali della riga.The original values for the row. Questa versione di riga non è disponibile per le righe in cui il valore di RowState è Added.This row version does not exist for rows with a RowState of Added.
Proposed Valori proposti per la riga.The proposed values for the row. Questa versione di riga è disponibile durante un'operazione di modifica di una riga o per una riga che non fa parte di un DataRowCollection.This row version exists during an edit operation on a row, or for a row that is not part of a DataRowCollection.

Per verificare se a DataRow è associata una particolare versione di riga, è possibile chiamare il metodo HasVersion e passare DataRowVersion come argomento.You can test whether a DataRow has a particular row version by calling the HasVersion method and passing a DataRowVersion as an argument. DataRow.HasVersion(DataRowVersion.Original), ad esempio, restituirà false per le nuove righe aggiunte prima della chiamata a AcceptChanges.For example, DataRow.HasVersion(DataRowVersion.Original) will return false for newly added rows before AcceptChanges has been called.

Nell'esempio di codice seguente vengono visualizzati i valori in tutte le righe eliminate di una tabella.The following code example displays the values in all the deleted rows of a table. Le righe Deleted non dispongono di una versione della riga Current, pertanto è necessario passare DataRowVersion.Original quando si accede ai valori della colonna.Deleted rows do not have a Current row version, so you must pass DataRowVersion.Original when accessing the column values.

Dim catTable As DataTable = catDS.Tables("Categories")  
  
Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)  
  
Console.WriteLine("Deleted rows:" & vbCrLf)  
  
Dim catCol As DataColumn  
Dim delRow As DataRow  
  
For Each catCol In catTable.Columns  
  Console.Write(catCol.ColumnName & vbTab)  
Next  
Console.WriteLine()  
  
For Each delRow In delRows  
  For Each catCol In catTable.Columns  
    Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)  
  Next  
  Console.WriteLine()  
Next  
DataTable catTable = catDS.Tables["Categories"];  
  
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);  
  
Console.WriteLine("Deleted rows:\n");  
  
foreach (DataColumn catCol in catTable.Columns)  
  Console.Write(catCol.ColumnName + "\t");  
Console.WriteLine();  
  
foreach (DataRow delRow in delRows)  
{  
  foreach (DataColumn catCol in catTable.Columns)  
    Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");  
  Console.WriteLine();  
}  

Vedere ancheSee also