Перейти к содержанию

TreeLookup (постановка задачи)#

TreeLookup - элемент управления, позволяющий выбирать объект из иерархического списка, созданный на основе контрола Lookup.

Функциональные требования#

Выбор объекта из списка#

Доступные для выбора объекты отображаются в иерархической таблице (в виде т.н. "дерева"). Строки объектов, имеющих дочерние объекты, снабжаются элементом управления в форме равнобедренного треугольника, направление вершины которого зависит от состояния списка дочерних объектов: вниз - список свёрнут, вправо - список развёрнут.

Список доступных объектов открывается в случаях:

  • Нажата кнопка с направленной вниз стрелкой
  • Одно из текстовых полей имеет фокус и нажата курсорная клавиша "вниз"
  • Производится ввод текста в поле ввода наименования

Выбор объекта осуществляется двумя способами:

  • С помощью мыши. При нажатии левой кнопкой мыши по строке таблицы объект данной строки выбирается в качестве текущего значения контрола
  • С помощью клавиатуры. Навигация по таблице выпадающего списка производится курсорными клавишами "вверх" и "вниз". При нажатии кнопки "Enter" ("Ввод") выпадающий список закрывается, а выделенная строка выбирается в качестве текущего значения контрола

Смена состояния списка дочерних объектов осуществляется кликом по по треугольнику в строке объекта, имеющего дочерние объекты и, при навигации по таблице, по нажатию курсорных клавиш "влево"-"вправо" ("влево" - свернуть, "вправо" - развернуть"). Если таблица выпадающего списка не отображается, курсорные клавиши "влево" и "вправо" работают согласно пользовательским требованиям к контролу Lookup.

Отображение выбранного объекта#

  • В поле кода лукапа должно отображаться значение свойства valueMember выбранного объекта
  • В поле наименования лукапа должно отображаться значение свойства displayMember выбранного объекта

См. также Поля кода и наименования.

Для лукап-колонки контрола Grid необходима настраиваемая возможность отображать в ячейках колонки текст, составленный из наименований всех узлов дерева, расположенных вверх по иерархической цепочке от текущего (например, "Корневой элемент №1 -> Вложенный элемент №7 -> Текущий элемент").

Поиск объекта#

При вводе значения в поле наименования в таблице выпадающего списка должны отобразиться объекты, хотя бы одно свойство которых (поиск ведётся по свойствам, представленным колонками таблицы) удовлетворяет условию с участием введённого значения:

  • Текстовые значения - частичное совпадение
  • Числа - точное совпадение

См. также Механизм поиска.

Если найденный объект является дочерним по отношению к другому объекту, должна отображаться вся цепочка иерархии.

Если найденный объект обладает дочерними элементами, они также должны отображаться в выпадающем списке.

Нефункциональные требования#

  • При открытии выпадающего списка иерархические узлы должны быть свёрнуты. Если, при этом, в лукапе выбран объект, то цепочка его иерархии должна быть развёрнуты
  • Окно выпадающего списка должно содержать, помимо таблицы, кнопки для сворачивания всех узлов дерева и для разворачивания всех узлов дерева (?)
  • Пользователь должен иметь возможность регулировать высоту (и ширину?) выпадающего списка (сохраняется до закрытия экранной формы)
  • Выпадающий список из 500 объектов верхнего уровня (без дочерних объектов) должен открываться не более чем за 1.5 секунд (на компьютере с Intel Core 2.2 GHz, 4 гигабайта ОЗУ, windows 7 (x64), в браузере Google Chrome 41)
  • При выполнении долгих операций необходимо сообщать пользователю о недоступности контрола из-за совершаемой системой работы

См. также#

Lookup (постановка задачи)