Просмотр данных в DataTable

Доступ к содержимому DataTable можно получить с помощью коллекций Rows и ColumnsDataTable. Можно также использовать Select метод для возврата подмножества данных в DataTable соответствии с критериями, включая условия поиска, порядок сортировки и состояние строки. Вы также можете использовать метод Find в DataRowCollection при поиске конкретной строки по значению первичного ключа.

Метод SelectDataTable объекта возвращает набор DataRow объектов, которые соответствуют указанным критериям. Select принимает необязательные аргументы выражения фильтра, выражения сортировки и DataViewRowState. Выражение фильтра определяет, какие строки возвращаются на основе значений DataColumn, таких как LastName = 'Smith'. Выражение сортировки следует стандартным соглашениям SQL для упорядочивания столбцов, например LastName ASC, FirstName ASC. Правила написания выражений см. в Expression свойстве DataColumn класса.

Подсказка

Если вы выполняете ряд вызовов Select метода DataTable, вы можете повысить производительность, сначала создав DataView для DataTable. DataView Создание индексов строк таблицы. Затем Select метод использует этот индекс, значительно сокращая время для создания результата запроса. Сведения о создании DataViewтаблицы данных см. в разделе DataViews.

Метод Select определяет, какая версия строк для просмотра или управления ими основана на DataViewRowState. В следующей таблице приведены возможные значения для перечислений DataViewRowState.

Значение DataViewRowState Описание
CurrentRows Текущие строки, включая без изменений, добавленные и измененные строки.
Удалено Удаленная строка.
ModifiedCurrent Текущая версия, которая является измененной версией исходных данных. (См. ModifiedOriginal.)
ИзмененныйОригинал Исходная версия всех измененных строк. Текущая версия доступна с помощью ModifiedCurrent.
Добавлено Новая строка.
Нет Нет.
OriginalRows Исходные строки, включая неизмененные и удаленные строки.
Неизменившийся Неизмененная строка.

В следующем примере объект DataSet фильтруется таким образом, чтобы вы работали только с теми строками, для которых значение DataViewRowState установлено на 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);
  }
}

Метод Select можно использовать для возврата строк с разными RowState значениями или значениями полей. В следующем примере возвращается DataRow массив, ссылающийся на все строки, которые были удалены, и возвращает другой DataRow массив, ссылающийся на все строки, упорядоченные по CustLName, где CustID столбец больше 5. Сведения о просмотре сведений в строке Deleted см. в разделе "Состояния строк" и "Версии строк".

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

См. также