Фильтрация данных
В этом разделе будет представлен небольшой пример “фильтрации” данных. Предположим, мы хотели бы добавить возможность пользователю фильтровать своих питомцев по типам – только кошки, собаки и т.д. Для этого в окне пользователя следует добавить связанный элемент управления – справочник, как представлено на рис.1
Рис.1 Дообавление меню для выбора типа животного
После этого следует видоизменить запрос списка животных таким образом, чтобы он стал включать в себя тип животного, а если тип отсутствует, то выводить полный список (рис.2)
Рис.2 Изменение запроса, возвращающего список животных конкретного владельца
Для этого в запросе добавляем параметр, который связываем с полем TYPE
таблицы PET
.
После чего исправляем текст запроса таким образом, чтобы в случае отсутствия параметра типа животного возвращался полный список питомцев.
Следует помнить об аннотации @manual
, поэтому запрос следует вызывать всякий раз, когда пользователь изменит тип животного.
1 2 3 4 5 6 7 8 9 10 |
|
Модификация запроса приведет к соответствующим изменениям в модели данных, в результате чего в запрос можно будет передавать дополнительный параметр petType
. Добавим параметр модели petType
, который свяжем с соответствующим параметром запроса, как показано на рис.3.
Рис.3 Добавление параметра модели
Далее необходимо связать виджет справочник (modelCombo) с соответствующим параметром и полями таблицы модели данных petType
.
В свойствах виджета справочник в поле field
укажем параметр модели – petType
, а поля displayField
and valueField
укажем соответствующие поля NAME
и PETTYPE_ID
таблицы petTypes
.
Рис.4 Настраиваем параметры справочника
Поскольку в запросе указана аннотация @manual
, то при изменении пользователем выбираемого животного в справочнике следует производить перевыполнение запроса.
Поскольку изменение типа питомца приведет к изменению параметра модели, добавим код перевыполнения запроса в событие OnChanged параметров модели данных.
На рис.3, справа представлен интерфейс установки обработчика события для параметров модели. В случае, если у запроса отсутствует аннотация @manual
, то данную операцию можно не выполнять.
В результате код обработчика будет иметь следующий вид:
1 2 3 4 5 6 7 |
|
Результат фильтрации представлен на рис.5 и рис.6.
Рис.5 Тип питомца отсутствует
Рис.6 Тип питомца – кот