Просмотр данных в таблице данных
Доступ к содержимому 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 | Description |
---|---|
CurrentRows | Текущие строки, включая не изменившиеся, добавленные и измененные. |
Удалено | Удаленная строка. |
ModifiedCurrent | Текущая версия, которая является измененной версией исходных данных. (См. раздел ModifiedOriginal.) |
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");