Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 | Текущие значения строки. Эта версия строки не существует для строк с RowState Deleted . |
Default | Версия строки по умолчанию для определенной строки. Версия строки по умолчанию для Added , Modified или Deleted строки — Current . Версия строки по умолчанию для Detached — это Proposed . |
Original | Исходные значения строки. Эта версия строки не существует для строк с RowState Added . |
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();
}