Compartilhar via


Exibindo dados em uma DataTable

Você pode acessar o conteúdo de um DataTable usando as coleções Rows e Columns da DataTable. Use também o método Select para retornar subconjuntos dos dados em uma DataTable de acordo com os critérios que incluem critérios de pesquisa, ordem de classificação e estado de linha. Além disso, você pode usar o método Find da 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 objetos DataRow que correspondem aos critérios específicos. Select usa argumentos opcionais de uma expressão de filtro, uma expressão de classificação e DataViewRowState. A expressão de filtro que identifica as linhas que devem ser retornadas com base nos valores de DataColumn, como LastName = 'Smith'. A expressão de classificação segue as convenções padrão de SQL para ordenar colunas, por exemplo LastName ASC, FirstName ASC. Para ver regras sobre como escrever expressões, confira a propriedade Expression da classe DataColumn.

Dica

Se você estiver executando várias chamadas ao método Select de uma DataTable, poderá aumentar o desempenho criando primeiro uma DataView para a DataTable. A criação da DataView indexa as linhas da tabela. Em seguida, o método Select usa esse índice, reduzindo consideravelmente o tempo necessário para gerar o resultado da consulta. Para obter informações sobre como criar uma DataView para uma DataTable, confira DataViews.

O método Select determina a versão das linhas que deve ser exibida ou processada com base em um DataViewRowState. A tabela a seguir descreve os valores de enumeração possíveis de DataViewRowState.

Valor de DataViewRowState Descrição
CurrentRows Linhas atuais, incluindo inalteradas, adicionadas e modificadas.
Excluída Uma linha excluída.
ModifiedCurrent A versão atual, que é uma versão modificada dos dados originais. (Confira ModifiedOriginal.)
ModifiedOriginal A versão original de todas as linhas alteradas. A versão atual está disponível por meio de ModifiedCurrent.
Adicionado Uma nova linha.
Nenhum Nenhum.
OriginalRows Linhas originais, incluindo linhas inalteradas e excluídas.
Inalterado Uma linha inalterada.

No exemplo a seguir, o objeto DataSet é filtrado de modo que você somente trabalhe com as 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 ou valores de campo diferentes de RowState. O exemplo a seguir retorna uma matriz de DataRow que referencia todas as linhas que foram excluídas e retorna outra matriz de DataRow que referencia todas as linhas, ordenada por CustLName, em que a coluna CustID é maior que 5. Para obter informações sobre como ver informações na linha Deleted, confira Estados e versões de 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");

Confira também