Поделиться через


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

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

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

Подсказка

Если вы выполняете ряд вызовов метода Select объекта DataTable, вы можете повысить производительность, сначала создав DataView для DataTable. Создание DataView индексирует строки таблицы. Затем метод Select использует этот индекс, значительно сокращая время для создания результата запроса. Сведения о создании DataView для DataTable см. в разделе 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. Сведения о просмотре сведений в удаленной строке см. в разделе "Состояния строк" и "Версии строк".

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

См. также