Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ADO.NET управляет строками в таблицах с помощью состояний строк и версий. Состояние строки указывает состояние строки; Версии строк поддерживают значения, хранящиеся в строке, так как они изменяются, включая текущие, исходные и значения по умолчанию. Например, после изменения столбца в строке строка будет иметь состояние Modifiedстроки и две версии строк: Currentкоторые содержат текущие значения строк и Originalсодержат значения строк перед изменением столбца.
Каждый DataRow объект имеет RowState свойство, которое можно проверить, чтобы определить текущее состояние строки. В следующей таблице приводится краткое описание каждого RowState элемента перечисления.
| Значение состояния строки | Описание |
|---|---|
| Unchanged | Изменения не были внесены с момента последнего вызова AcceptChanges или с момента создания строки DataAdapter.Fill. |
| Added | Строка была добавлена в таблицу, но AcceptChanges не была вызвана. |
| Modified | Некоторые элементы строки были изменены. |
| Deleted | Строка была удалена из таблицы и AcceptChanges не была вызвана. |
| Detached | Строка не является частью любой DataRowCollection. Для только что созданной строки RowState задано Detached значение. После добавления нового DataRow в DataRowCollection вызовом метода Add, значение свойства RowState устанавливается в Added.Detached также устанавливается для строки, которая была удалена из DataRowCollection с использованием метода Remove или с помощью метода Delete, за которым следует метод AcceptChanges. |
При вызове AcceptChanges на DataSet, DataTable или DataRow все строки со статусом Deleted удаляются. Остальные строки получают состояние строки Unchanged, а значения в версии строки Original перезаписываются значениями версии строки Current. Когда вызывается RejectChanges, удаляются все строки с состоянием Added. Остальные строки получают состояние строки Unchanged, а значения в версии строки Current перезаписываются значениями версии строки Original.
Вы можете просмотреть различные версии одной строки, передав параметр DataRowVersion с ссылкой на столбец, как показано в следующем примере.
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();
В следующей таблице приводится краткое описание каждого DataRowVersion элемента перечисления.
| Значение DataRowVersion | Описание |
|---|---|
| Current | Текущие значения строки. Эта версия строки не существует для строк с RowStateDeleted. |
| Default | Версия строки по умолчанию для определенной строки. Версия строки по умолчанию для Added, Modified или Deleted строки — Current. Версия строки по умолчанию для Detached — это Proposed. |
| Original | Исходные значения строки. Эта версия строки не существует для строк с RowStateAdded. |
| Proposed | Предлагаемые значения для строки. Эта версия строки существует во время операции редактирования строки или для строки, которая не является частью DataRowCollection. |
Можно проверить, имеет ли DataRow определенную версию строки, вызвав метод HasVersion и передав DataRowVersion в качестве аргумента. Например, DataRow.HasVersion(DataRowVersion.Original) будет возвращаться для только что добавленных строк перед вызовом false.
В следующем примере кода отображаются значения во всех удаленных строках таблицы.
Deleted Строки не имеют Current версии строки, поэтому при доступе к значениям столбца необходимо указать DataRowVersion.Original .
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();
}