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


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

Обновлен: November 2007

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

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

kcs3hdk5.alert_note(ru-ru,VS.90).gifСовет.

Если выполняется несколько вызовов метода Select объекта DataTable, можно повысить производительность, создав вначале представление DataView для таблицы DataTable. При создании DataView индексируются строки таблицы. Метод Select использует этот индекс, что значительно сокращает время формирования результата. Сведения о создании представления DataView для таблицы DataTable см. в разделе Объекты DataView (ADO.NET).

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

Значение DataViewRowState

Описание

CurrentRows

Текущие строки, включая не изменившиеся, добавленные и измененные.

Deleted

Удаленная строка.

ModifiedCurrent

Текущая версия, которая является измененной версией исходных данных. (См. ModifiedOriginal.)

ModifiedOriginal

Исходная версия всех измененных строк. Текущая версия доступна при использовании параметра ModifiedCurrent.

Added

Новая строка.

None

Отсутствует.

OriginalRows

Исходные строки, включая неизменившиеся и удаленные.

Unchanged

Неизменившаяся строка.

В следующем примере объект 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");

См. также

Основные понятия

Состояния и версии строк

Ссылки

DataRow

DataSet

DataTable

DataViewRowState

Другие ресурсы

Обработка данных в DataTable