Введение#
Элемент управления Lookup предназначен для загрузки определённого набора данных с целью предоставить пользователю возможность выбора значения (или значений) из множества предложенных вариантов. Элемент управления имеет разнообразные варианты настройки, включающие несколько режимов работы, используемые источники данных, оформление содержимого элемента управления и т.д.
Свойства#
| Наименование | Тип | Описание |
|---|---|---|
| bind | Строка | свойство, к которому привязывается элемент управления |
| bindingMode | Строка | режим привязки. Доступные значения: object, primitive, multiple. По умолчанию значение object |
| caption | Строка | заголовок |
| captionTextAlign | Строка | выравнивание текста заголовка элемента управления. По умолчанию значение left. Разрешенные значения: left, right |
| captionWidth | Число | ширина заголовка элемента управления (для Bootstrap-верстки) |
| codeBoxWidth | Число | ширина поля с кодом. По умолчанию значение 50 |
| dataSource | Массив | источник данных Lookup |
| displayMember | Строка | имя свойства, являющегося наименованием объекта. По умолчанию значение Name |
| displayMemberColumnText | Строка | заголовок колонки с наименованием |
| displayMemberColumnWidth | Строка | ширина колонки с наименованием. Если не задано, то вычисляется автоматически |
| editorWidth | Число | ширина элемента управления (для Bootstrap-верстки) |
| enabled | Bool | доступность элемента управления для редактирования. По умолчанию значение true |
| filterCondition | Строка | тип фильтрации (доступные значения: contains, starts_with, equal). По умолчанию значение contains |
| hint | Строка | всплывающая подсказка, которая появляется при наведении на элемент управления |
| id | Строка | nan |
| placeholder | Строка | вспомогательный текст в поле displayMember элемента управления |
| popupWindowType | Строка | тип окна выпадающего списка. Доступные значения: simple, tree (с простым и древовидным гридом) |
| readOnly | Bool | режим "только для чтения". По умолчанию значение false |
| rowsCount | Число | количество строк, отображаемое в выпадающем списке. По умолчанию значение 9 |
| showDisplayMember | Bool | отображение поля с наименованием. По умолчанию значение true |
| showValueMember | Bool | отображение поля с кодом. По умолчанию значение true |
| sortBy | Строка | поле сортировки в выпадающем списке по умолчанию |
| sortOrder | Строка | порядок сортировки. По умолчанию значение asc |
| tags | Строка | позволяет объединять элементы управления в группы, возвращает массив имен |
| value | Объект | текущее значение |
| valueKey | Строка | значение свойства выбранного объекта, которое указано в качестве свойства valueMember |
| valueMember | Строка | имя свойства, являющегося кодом объекта. По умолчанию значение VCode |
| valueMemberColumnText | Строка | заголовок колонки с кодом |
| valueMemberColumnWidth | Bool | ширина колонки с кодом. Если не задано, то вычисляется автоматически |
| valueMemberPlaceholder | Строка | вспомогательный текст в поле valueMember элемента управления |
| visible | Bool | видимость элемента управления. По умолчанию значение true |
| width | Число | ширина элемента управления. По умолчанию значение 100% |
Методы#
| Наименование | Описание |
|---|---|
| getDataSourceParameters | возвращает текущие применённые параметры загрузки источника данных |
| setDataSourceParameters | устанавливает объект в качестве словаря параметров загрузки источника данных. После установки параметров фокусировка вызовет обновление источника данных с учетом заданных параметров |
| resetLoadedData | сбрасывает кэш загруженных данных выпадающего списка и обозревателя аналитик (для постраничного лукапа) |
| setColumnsVisibility | устанавливает видимость для дополнительных колонок в выпадающем списке |
| getVisibleColumns | возвращает список видимых колонок в выпадающем списке |
| getHiddenColumns | возвращает список скрытых колонок в выпадающем списке |
Детальное описание#
setColumnsVisibility#
Принимает массив объектов:
- dataField - dataField колонки
- value - видимость колонки (значение true или false)
Пример:
Не работает для колонок valueMember и displayMember (для них есть свойство showValueMember и showDisplayMember).
setDataSourceParameters#
Пример:
События#
| Наименование | Описание |
|---|---|
| valueChanged (onchage) | возникает при смене значения |
Источник данных#
Основным свойством элемента управления Lookup является его источник данных - dataSource. В качестве источников данных могут выступать модели и запросы.
Для использования нужного источника данных в элементе управления необходимо задать в свойстве dataSoure путь к нему относительно текущей формы.
Загрузка указанного источника данных будет выполнена однократно при первом обращении к элементу управления (точнее, при первой фокусировке на нём).
Работа с источником данных#
Зачастую запросы в системе реализуются с целью выполнения расчетов на основе их входных параметров. Подобные запросы можно использовать в качестве источника данных для Lookup. Для таких ситуаций у элемента управления Loookup реализованы методы для получения и установки параметров загрузки источника данных: getDataSourceParameters и setDataSourceParameters.
Описание запроса, который используется в данном примере в качестве источника данных:
Запрос подразумевает использование параметра code. Для его ввода используются элементы управления TextBox и Button.
Установка параметра осуществляется в обработчике нажатия кнопки с помощью метода setDataSourceParameters, используя значение в текстовом поле с идентификатором queryParameter.
Выполнение метода setDataSourceParameters вызывает загрузку источника данных элемента управления (что можно использовать при необходимости его обновить).
Режимы привязки#
Режим привязки Lookup отвечает за то, в каком виде формируются и считываются значения в контроле. В примере представлены варианты настройки на режимы множественного выбора и примитивных типов. По-умолчанию используется режим привязки на объект.
Свойство bindingMode влияет на то, как будут загружаться, выбираться, сохраняться и отображаться значения при работе с данными формы. Например, в режиме примитивных типов (значение - primitive) контрол требует добавление источника данных в коллекцию кэшей данных формы. При использовании привязки к данным формы (используя свойство bind) в привязанном поле будет храниться примитивное значение.
В режиме множественного выбора (значение - multiple) у элемента управления отключается работа с данными формы и сохранение выбранных пользователем значений необходимо контролировать отдельно. В таком режиме в значение элемента управления записывается массив, содержащий выбранные записи.
Постраничность#
Пример:
Данный пример показывает несколько вариантов настройки специализированного вида элемента управления Lookup - PageableLookup. PageableLookup используется для загрузки большого количества данных небольшими порциями ("страницами"). Для этого у элемента управления реализованы свойство topCount, которое определяет количество записей на страницу. topCount рекомендуется использовать вместе со свойством rowsCount - количеством строк, отображаемых в контроле.
Древовидная структура данных#
Для поддержки древовидной структуры данных необходимо использовать специальные свойства элемента управления, переводящие его в древовидный режим отображения данных.
Для включения древовидного режима отображения данных обязательно необходимо использовать свойство popupWindowType в значении tree. Далее необходимо указать какие свойства объектов коллекции использовать в качестве ключевого поля (keyProperty) и поля, хранящего ключ родительской записи (parentKeyProperty).
Для данного режима реализован также специальный метод labelRenderer, который позволяет обрабатывать и формировать отображаемые в элементе управления значения полей, используемых в качестве информационных (displayMember):
В древовидном режиме отображения данных элемент управления поддерживает также работу в режиме привязки на примитивных значениях (в примере: элемент управления с id lutree8). Для такого режима также, как и при обычном режиме отображения данных, требуется использовать кэши данных. В данном случае используется адаптер:
Фильтрация данных#
Lookup поддерживает возможность фильтрации коллекции отображаемых записей на стороне клиента. Для её использования необходимо определить метод формы, в котором будут описаны условия фильтрации, и использовать его в свойстве filter элемента управления:
Методы фильтрации могут иметь разнообразную логику. Но стоит помнить о производительности и том, что метод будет вызываться для каждой записи в коллекции данных элемента управления. Примеры методов фильтрации:
Сортировка данных#
Для установки сортировки в элементе управления по умолчанию можно использовать свойства sortBy и sortOrder. В первом указывается нужное поле источника данных, во втором - порядок сортировки (asc или desc).
Проверка выбранного значения#
Для проверки выбранного пользователем значения можно использовать свойство validator. С его помощью можно определить метод, в котором будет осуществляться проверка выбранного значения на соответствие нужным условиям:
Метод, используемый для проверки значения:
Если выбранное значение не удовлетворяет описанному в методе условию, то оно не будет установлено в качестве текущего значения элемента управления.
Настройка внешнего вида#
Элемент управления по умолчанию поддерживает изменение размера выпадающего списка путём перетаскивания его границ указателем мыши.
Примеры настройки внешнего вида элемента управления можно было встретить также в примерах выше. В частности, добавление дополнительных колонок в выпадающий список элемента управления:
Также колонкам можно задавать ширину с помощью их свойства width.
Ввод с клавиатуры#
Функционал элемента управления Lookup поддерживает работу с клавиатурой. При фокусировке на элемент упарвления с помощью клавиш со стрелками можно переключаться между кодовым полем (valueMember) и поле наименования (displayMember), а также открывать выпадающий список и переходить в нём по доступным значениям. Выбрать нужное значение можно с помощью клавиши Enter.
При вводе текста в поля элемента управления осуществляется фильтрация доступных значений после секундной паузы во вводе.