Ver datos en un objeto DataTable

Puede acceder al contenido de una DataTable mediante las colecciones Rows y Columns de DataTable. Se puede utilizar también el método Select para devolver subconjuntos de los datos de una DataTable según ciertos criterios como, por ejemplo, criterios de búsqueda, criterio de ordenación y estado de la fila. Además, se puede utilizar el método Find de DataRowCollection cuando se busque una fila determinada mediante el valor de una clave principal.

El método Select del objeto DataTable devuelve un conjunto de objetos DataRow que cumplen con los criterios especificados. Select toma argumentos opcionales de una expresión de filtro, expresión de ordenación y DataViewRowState. La expresión de filtro identifica qué filas se van a devolver basándose en valores de DataColumn como, por ejemplo, LastName = 'Smith'. La expresión de ordenación sigue convenciones SQL estándar para ordenar columnas, por ejemplo LastName ASC, FirstName ASC. Para obtener las reglas de escritura de expresiones, consulte la propiedad Expression de la clase DataColumn.

Sugerencia

Cuando se realizan varias llamadas al método Select de una DataTable, se puede aumentar el rendimiento mediante la creación de una DataView para DataTable. Al crear DataView, se indexan las filas de la tabla. A continuación, el método Select utiliza ese índice, lo que reduce considerablemente el tiempo necesario para generar el resultado de la consulta. Para obtener información sobre la creación de una DataView para DataTable, consulte DataViews.

El método Select determina qué versión de las filas se debe ver o manipular, según un DataViewRowState. En la siguiente tabla se recogen los posibles valores de la enumeración DataViewRowState.

Valor DataViewRowState Descripción
CurrentRows Filas actuales, incluidas las filas sin modificar, agregadas y modificadas.
Eliminado Una fila eliminada.
ModifiedCurrent Una versión actual, que es una versión modificada de los datos originales. (Consulte ModifiedOriginal.)
ModifiedOriginal Versión original de todas las filas modificadas. La versión actual está disponible mediante ModifiedCurrent.
Agregado Una fila nueva.
None Ninguno.
OriginalRows Filas originales, incluidas las filas sin modificar y las eliminadas.
Sin cambios Una fila sin modificar.

En el ejemplo siguiente, el objeto DataSet se filtra de manera que se trabaje solo con las filas cuyo valor DataViewRowState esté establecido en 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);
  }
}

El método Select se puede utilizar para devolver filas con valores de RowState o valores de campo distintos. En el ejemplo siguiente se devuelve una matriz DataRow que hace referencia a todas las filas que se han eliminado y devuelve otra matriz DataRow que hace referencia a todas las filas, ordenadas por CustLName, donde la columna CustID es mayor que 5. Para más información sobre cómo ver la información de la fila Deleted, consulte Estados y versiones de filas.

' 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");

Consulte también