Книга: Обработка баз данных на Visual Basic®.NET
Поиск, фильтрация и сортировка записей
Поиск, фильтрация и сортировка записей
Иногда нужно работать не со всеми, а только с некоторыми записями объекта DataSet, например с одной записью или подмножеством всех записей. Для этого можно использовать методы Find и Select.
Метод Find принадлежит свойству DataRowCollection объекта DataTable, который используется для поиска и возвращения единственной строки, указанной с помощью значения первичного ключа таблицы.
Перед использованием метода Find для обнаружения некоторой строки в таблице Departments, которая определена в листинге 5.1, нужно определить первичный ключ таблицы. Это можно сделать с помощью присвоения одного или нескольких полей свойству PrimaryKey таблицы. (Даже если первичный ключ создан на основе единственного поля, свойство PrimaryKey таблицы является массивом объектов DataColumn.)
В приведенных ниже строках кода, которые следует добавить в конце подпрограммы CreateDataSet из листинга 5.1, первичный ключ таблицы Departments создается на основе поля DepartmentName.
Dim pk(0) As DataColumn
pk(0) = dtDepartments.Columns("DepartmentName")
dtDepartments.PrimaryKey = pk
НА ЗАМЕТКУ
При создании первичного ключа с помощью свойства PrimaryKey для объекта DataTable на основе одного поля для свойства AllowDBNull этого поля автоматически задается значение False, а для свойства Unique — значение True. А если первичный ключ создан на основе нескольких полей, то только для свойства AllowDBNull этих полей автоматически задается значение False.
После определения первичного ключа метод Find используется так, как показано ниже.
Dim desiredRow As DataRow
desiredRow = dtDepartments.Rows.Find("sales")
Здесь переменной desiredRow присваивается объект DataRow с указанным значением первичного ключа или значение Nothing, если такая запись не будет найдена.
Если первичный ключ таблицы основан на нескольких полях, то соответствующие значения первичного ключа передаются в виде элементов массива (типа Object) методу Find.
' Указание первичного ключа.
Dim pk(0) As DataColumn
pk(0) = dtEmployees.Columns("FirstName")
pk(1) = dtEmployees.Columns("LastName")
dtEmployees.PrimaryKey = pk
' Попытка поиска нужной записи.
Dim desiredRow As DataRow
Dim desiredValues (1) As Object
desiredValues(0) = "Sam"
desiredValues(1) = "Johnson"
desiredRow = dtEmployees.Rows.Find(desiredValues)
Метод Select объекта DataTable возвращает массив объектов DataRow. Возвращаемые строки могут соответствовать критерию фильтрования, порядку сортировки и/или спецификации состояния (объект DataViewRowState пространства имен System.Data).
Приведенный ниже код возвращает и отображает имена всех сотрудников с фамилией Johnson.
Dim selectedRows () As DataRow
selectedRows = dtEmployees.Select("LastName = 'Johnson'")
Dim i As Integer
For i = 0 to selectedRows.GetUpperBound(0)
MessageBox.Show(selectedRows(i)("FirstName"))
Next
Для возврата записей, отсортированных в порядке убывания, можно отредактировать строку с методом Select так, как показано ниже.
selectedRows = dtEmployees. Select ("LastName = 'Johnson'", "FirstName DESC")
Наконец, указание состояния записи в качестве аргумента метода Select позволяет извлекать записи с определенной версией данных непосредственно в процессе их редактирования. Например, для извлечения всех исходных значений записей даже после их редактирования (но еще до вызова метода AcceptChanges) следует указать значение OriginalRows перечисления DataViewRowState, как показано ниже.
selectedRows = dtEmployees.Select(Nothing, Nothing, DataViewRowState.OriginalRows)
Для отбора вновь добавленных записей с фамилией Johnson следует указать значение Added перечисления DataViewRowState, как показано ниже.
selectedRows = dtEmployees. Select ("LastName = 'Johnson'", Nothing, DataViewRowState.Added)
А если нужно отобрать вновь добавленные записи с фамилией Johnson и отсортировать их по имени, то в таком случае следует использовать приведенный ниже код.
selectedRows = dtEmployees.Select("LastName = 'Johnson'", "FirstName DESC", DataViewRowState.Added)
В табл. 5.3 приведены все возможные варианты состояния записи, которые могут быть представлены членами перечисления DataViewRowState. Упомянутые здесь изменения связаны с последней загрузкой данных или вызовом метода АcсеptChanges.
Таблица 5.3. Члены перечисления DataViewRowState
Член | Описание |
---|---|
Added | Вновь созданные записи |
CurrentRows | Все текущие записи (включая новые, измененные или неизмененные записи) |
Deleted | Все записи, отмеченные как удаленные |
ModifiedCurrent | Текущая версия измененной записи |
ModifiedOriginal | Исходная версия измененной записи |
None | Нет сведений |
OriginalRows | Все исходные записи, включая неизмененные и удаленные, кроме новых записей |
Unchanged | Все неизмененные записи |
- 5.2.9. Сортировка и Фильтрация
- Фильтрация
- Оптимальная структура хранения записей
- Настройка учетных записей пользователей
- 13.3.4. Поиск и замена текста
- Фильтры и поиск
- 1.3.1. Индексирование сайта в поисковых системах
- Сортировка и фильтрация списка
- Глава 4 Поиск и выбор идеи
- Глава 1 Поиск (Найдется всё!)
- Нормально ли воспринимается поисковыми системами маскировка партнерских ссылок?
- Общие рекомендации поиска неисправностей