Exibindo dados em uma DataTable
Você pode acessar o conteúdo de a DataTable usando as coleções Rows and Columns da DataTable. Você também pode usar o Select método para retornar subconjuntos dos dados em uma DataTable de acordo com critérios, incluindo critérios de pesquisa, ordem de classificação e estado da linha. Além disso, você pode usar o Find método de DataRowCollection ao procurar uma linha específica usando um valor de chave primária.
O método Select do objeto DataTable retorna um conjunto de DataRow objetos que correspondem aos critérios especificados. Select usa argumentos opcionais de uma expressão de filtro, expressão de classificação e DataViewRowState. A expressão de filtro identifica quais linhas retornar com base em valores DataColumn , como LastName = 'Smith'
. A expressão sort segue convenções SQL padrão para ordenar colunas, por exemplo LastName ASC, FirstName ASC
. Para obter regras sobre como escrever expressões, consulte a Expression propriedade da classe DataColumn.
Gorjeta
Se você estiver executando várias chamadas para o método Select de um DataTable, você pode aumentar o desempenho criando primeiro um DataView para o DataTable. A criação do DataView indexa as linhas da tabela. Em seguida, o método Select usa esse índice, reduzindo significativamente o tempo para gerar o resultado da consulta. Para obter informações sobre como criar um DataView para uma DataTable, consulte DataViews.
O método Select determina qual versão das linhas exibir ou manipular com base em um DataViewRowStatearquivo . A tabela a seguir descreve os possíveis valores de enumeração DataViewRowState .
Valor DataViewRowState | Description |
---|---|
CurrentRows | Linhas atuais, incluindo linhas inalteradas, adicionadas e modificadas. |
Eliminados | Uma linha excluída. |
Corrente modificada | Uma versão atual, que é uma versão modificada dos dados originais. (Ver ModifiedOriginal.) |
ModificadoOriginal | A versão original de todas as linhas modificadas. A versão atual está disponível usando ModifiedCurrent. |
Adicionado | Uma nova linha. |
Nenhuma | Nenhum. |
Linhas Originais | Linhas originais, incluindo linhas inalteradas e eliminadas. |
Inalterado | Uma linha inalterada. |
No exemplo a seguir, o objeto DataSet é filtrado para que você esteja trabalhando apenas com linhas cujo DataViewRowState está definido como CurrentRows.
Dim column As DataColumn
Dim row As DataRow
Dim currentRows() As DataRow = _
workTable.Select(Nothing, Nothing, DataViewRowState.CurrentRows)
If (currentRows.Length < 1 ) Then
Console.WriteLine("No Current Rows Found")
Else
For Each column in workTable.Columns
Console.Write(vbTab & column.ColumnName)
Next
Console.WriteLine(vbTab & "RowState")
For Each row In currentRows
For Each column In workTable.Columns
Console.Write(vbTab & row(column).ToString())
Next
Dim rowState As String = _
System.Enum.GetName(row.RowState.GetType(), row.RowState)
Console.WriteLine(vbTab & rowState)
Next
End If
DataRow[] currentRows = workTable.Select(
null, null, DataViewRowState.CurrentRows);
if (currentRows.Length < 1 )
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", column.ColumnName);
Console.WriteLine("\tRowState");
foreach (DataRow row in currentRows)
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", row[column]);
Console.WriteLine("\t" + row.RowState);
}
}
O método Select pode ser usado para retornar linhas com valores RowState ou valores de campo diferentes. O exemplo a seguir retorna uma matriz DataRow que faz referência a todas as linhas que foram excluídas e retorna outra matriz DataRow que faz referência a todas as linhas, ordenadas por CustLName, onde a coluna CustID é maior que 5. Para obter informações sobre como exibir as informações na linha Excluído, consulte Estados da linha e versões da linha.
' Retrieve all deleted rows.
Dim deletedRows() As DataRow = workTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
' Retrieve rows where CustID > 5, and order by CustLName.
Dim custRows() As DataRow = workTable.Select( _
"CustID > 5", "CustLName ASC")
// Retrieve all deleted rows.
DataRow[] deletedRows = workTable.Select(
null, null, DataViewRowState.Deleted);
// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");