Фильтрация данных
В этом разделе будет представлен небольшой пример “фильтрации” данных. Предположим, мы хотели бы добавить возможность пользователю фильтровать своих питомцев по типам – только кошки, собаки и т.д. Для этого в окне пользователя следует добавить связанный элемент управления – справочник, как представлено на рис.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 Тип питомца – кот