Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
ADO.NET gerencia linhas em tabelas usando estados e versões de linha. Um estado de linha indica o status de uma linha; As versões de linha mantêm os valores armazenados em uma linha conforme ela é modificada, incluindo valores atuais, originais e padrão. Por exemplo, depois de fazer uma modificação em uma coluna em uma linha, a linha terá um estado de linha de Modified
, e duas versões de linha: Current
, que contém os valores atuais da linha, e Original
, que contém os valores da linha antes da modificação da coluna.
Cada DataRow objeto tem uma RowState propriedade que você pode examinar para determinar o estado atual da linha. A tabela a seguir fornece uma breve descrição de cada RowState
valor de enumeração.
Valor de RowState | Descrição |
---|---|
Unchanged | Nenhuma alteração foi feita desde a última chamada para AcceptChanges ou desde que a linha foi criada por DataAdapter.Fill . |
Added | A linha foi adicionada à tabela, mas AcceptChanges não foi chamado. |
Modified | Algum elemento da linha foi alterado. |
Deleted | A linha foi excluída de uma tabela e AcceptChanges não foi chamada. |
Detached | A linha não faz parte de nenhum DataRowCollection . A RowState de uma linha recém-criada é definida como Detached . Depois que o novo DataRow é adicionado ao DataRowCollection chamando o Add método, o valor da RowState propriedade é definido como Added .Detached também é definido para uma linha que foi removida de um DataRowCollection usando o Remove método ou pelo Delete método seguido pelo AcceptChanges método. |
Quando AcceptChanges
tiver sido chamado em um DataSet, DataTable ou DataRow, todas as linhas com um estado de linha de Deleted
serão removidas. As linhas restantes recebem um estado de linha de Unchanged
, e os valores na versão da linha Original
são substituídos pelos valores da versão da linha Current
. Quando RejectChanges
é chamado, todas as linhas com um estado de linha Added
são removidas. As linhas restantes recebem um estado de linha de Unchanged
, e os valores na versão da linha Current
são substituídos pelos valores da versão da linha Original
.
Você pode visualizar as diferentes versões de uma linha passando um parâmetro DataRowVersion com a referência de coluna, conforme mostrado no exemplo a seguir.
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();
A tabela a seguir fornece uma breve descrição de cada DataRowVersion
valor de enumeração.
Valor de DataRowVersion | Descrição |
---|---|
Current | Os valores atuais para a linha. Esta versão de linha não existe para linhas com um RowState de Deleted . |
Default | A versão de linha padrão para uma linha específica. A versão de linha padrão para uma linha Added , Modified ou Deleted é Current . A versão de linha padrão de uma Detached linha é Proposed . |
Original | Os valores originais para a linha. Esta versão de linha não existe para linhas com um RowState de Added . |
Proposed | Os valores propostos para a linha. Essa versão de linha existe durante uma operação de edição em uma linha ou para uma linha que não faz parte de uma DataRowCollection . |
Você pode testar se um objeto DataRow
possui uma versão de linha específica chamando o método HasVersion e passando um DataRowVersion
como argumento. Por exemplo, DataRow.HasVersion(DataRowVersion.Original)
retornará false
para linhas recém-adicionadas antes AcceptChanges
de ter sido chamada.
O exemplo de código a seguir exibe os valores em todas as linhas excluídas de uma tabela. As linhas Deleted
não têm uma versão de linha Current
; portanto, você deve passar DataRowVersion.Original
ao acessar os valores de coluna.
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();
}