Udostępnij za pośrednictwem


Stany wiersza i wersje wiersza

ADO.NET zarządza wierszami w tabelach przy użyciu stanów wierszy i wersji. Stan wiersza wskazuje stan wiersza; Wersje wierszy zachowują wartości przechowywane w wierszu, ponieważ są modyfikowane, w tym bieżące, oryginalne i domyślne. Na przykład po wprowadzeniu modyfikacji kolumny w wierszu wiersz będzie miał stan Modifiedwiersza i dwie wersje wierszy: Current, która zawiera bieżące wartości wierszy i Original, która zawiera wartości wierszy przed zmodyfikowaniem kolumny.

Każdy DataRow obiekt ma RowState właściwość, którą można zbadać, aby określić bieżący stan wiersza. Poniższa tabela zawiera krótki opis każdej RowState wartości wyliczenia.

Wartość RowState opis
Unchanged Od ostatniego wywołania AcceptChanges metody lub od momentu utworzenia wiersza przez program nie wprowadzono żadnych zmian.DataAdapter.Fill
Added Wiersz został dodany do tabeli, ale AcceptChanges nie został wywołany.
Modified Niektóre elementy wiersza zostały zmienione.
Deleted Wiersz został usunięty z tabeli i AcceptChanges nie został wywołany.
Detached Wiersz nie jest częścią żadnego DataRowCollectionelementu . Nowo RowState utworzony wiersz ma wartość Detached. Po dodaniu nowego DataRow elementu do DataRowCollection metody przez wywołanie Add metody wartość RowState właściwości jest ustawiona na Addedwartość .

Detached parametr jest również ustawiany dla wiersza, który został usunięty z DataRowCollection metody przy użyciu Remove metody lub przez Delete metodę, po której następuje AcceptChanges metoda .

Gdy AcceptChanges jest wywoływana w obiekcie DataSet, DataTable lub DataRow, wszystkie wiersze ze stanem Deleted wiersza są usuwane. Pozostałe wiersze mają stan wiersza , Unchangeda wartości w Original wersji wiersza są zastępowane wartościami Current wersji wiersza. Po RejectChanges wywołaniu wszystkie wiersze ze stanem Added wiersza zostaną usunięte. Pozostałe wiersze mają stan wiersza , Unchangeda wartości w Current wersji wiersza są zastępowane wartościami Original wersji wiersza.

Różne wersje wierszy wiersza można wyświetlić, przekazując DataRowVersion parametr z odwołaniem do kolumny, jak pokazano w poniższym przykładzie.

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();  

Poniższa tabela zawiera krótki opis każdej DataRowVersion wartości wyliczenia.

Wartość DataRowVersion opis
Current Bieżące wartości dla wiersza. Ta wersja wiersza nie istnieje dla wierszy z wartością RowState Deleted.
Default Domyślna wersja wiersza dla określonego wiersza. Domyślna wersja wiersza dla Addedwiersza , Modifiedlub Deleted to Current. Domyślna wersja wiersza dla Detached wiersza to Proposed.
Original Oryginalne wartości dla wiersza. Ta wersja wiersza nie istnieje dla wierszy z wartością RowState Added.
Proposed Proponowane wartości dla wiersza. Ta wersja wiersza istnieje podczas operacji edycji w wierszu lub dla wiersza, który nie jest częścią elementu DataRowCollection.

Możesz sprawdzić, czy element DataRow ma określoną wersję wiersza, wywołując HasVersion metodę i przekazując DataRowVersion argument jako argument. Na przykład DataRow.HasVersion(DataRowVersion.Original) funkcja zwróci false nowo dodane wiersze przed AcceptChanges wywołaniami.

Poniższy przykład kodu przedstawia wartości we wszystkich usuniętych wierszach tabeli. Deleted wiersze nie mają Current wersji wiersza, dlatego należy przekazać DataRowVersion.Original je podczas uzyskiwania dostępu do wartości kolumn.

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();  
}  

Zobacz też