Элемент управления "BoundChooseBox"

Элемент управления BoundChooseBox предназначен для выбора значений ссылочных полей при помощи унифицированного интерфейса. В стандартном виде, элемент управления ChooseBox представляет из себя поле для отображения результатов выбора, и связанную с ним кнопку , инициирующую новый выбор:

Элемент управления "BoundChooseBox
Рисунок 1. Элемент управления "BoundChooseBox

BoundChooseBox использует технологию Data Binding (что отражено в его названии) для автоматической привязки к одному из полей карточки ссылочного типа (RefID или RefCardID). При этом он автоматически определяет тип ссылки, и в зависимости от этого отображает соответствующий интерфейс для выбора значения:

  • RefCardID — если поле является ссылкой на карточку, то для выбора значения BoundChooseBox отображает интерфейс Windows-клиента, в котором разрешено выбирать карточки.

  • RefID — для типизированной ссылки на строку другой карточки (или справочника). На выбор открывается пользовательский интерфейс этой карточки. Например, если поле является ссылкой на строку секции справочника сотрудников, то на выбор будет открыт справочник сотрудников.

    Особым случаем является ссылка на строку секции карточки папок — в этом случае элемент управления откроет на выбор Windows-клиент, в котором разрешено выбирать папки.

Если поле RefID карточки является нетипизированным (не указаны значения типа и секции связанной карточки) — то BoundChooseBox не сможет работать с таким полем! В этом случае рекомендуется использовать элемент управления CustomChooseBox.

При работе в режиме связывания, элемент управления BoundChooseBox автоматически выполняет чтение данных из поля карточки и первичную инициализацию, а также автоматически сохраняет выбранное значение в поле карточки в процессе использования. Таким образом, разработчику нужно выполнить только предварительную настройку элемента управления в Design Time, и нет необходимости писать код обработчиков событий.

Кроме этого, элемент управления BoundChooseBox имеет дополнительные сервисные функции:

  • Поддержка быстрого поиска и выбора объектов по нажатию горячих клавиш Ctrl+K.

  • Возможность ассоциации дополнительного контекстного меню для поля результатов выбора.

    Контекстного меню "BoundChooseBox"
    Рисунок 2. Контекстное меню "BoundChooseBox"
  • Возможность ассоциации дополнительного контекстного меню для кнопки выбора

    Контекстного меню кнопки выбора
    Рисунок 3. Контекстного меню кнопки выбора

Прежде чем приступить к использованию элемента управления BoundChooseBox, необходимо подготовить источник данных для него. В качестве источника данных может выступать объект RowDataSource, предназначенный для работы со строками секции карточки. Однако здесь необходимо учесть один нюанс: источник данных RowDataSource может возвращать сразу несколько строк (например, для секции коллекционного типа), а элемент управления BoundChooseBox может отображать только значение конкретного поля одной конкретной строки. Чтобы разрешить это противоречие, вводится ещё один промежуточный объект — BindingSource, который предназначен как раз, чтобы выбрать одну конкретную строку из набора, возвращаемого RowDataSource. Общую картину связывания данных в этом случае можно представить как на рисунке ниже.

Алгоритм связывания данных
Рисунок 4. Алгоритм связывания данных

Объект BindingSource входит в число стандартных элементов управления Microsoft, и доступен на панели инструментов в группе Data. Использовать его достаточно просто, он содержит всего одно значимое свойство — DataSource, где нужно разместить ссылку на уже подготовленный источник данных RowDataSource.

После создания и настройки источников данных (RowDataSource и BindingSource) можно приступать к настройке собственно элемента управления BoundChooseBox.

В свойстве BindingSource необходимо указать ссылку на предварительно настроенный объект BindingSource. После этого, в свойстве DataMember появится возможность выбрать (или ввести вручную) название конкретного поля карточки, с которыми связывается элемент управления BoundDataSource. Именно описание этого поля в схеме карточки будет являться определяющим для дальнейшей работы элемента управления (что конкретно он будет выбирать).

Дополнительно можно указать свойство FormatString — определяющее, как именно BoundChooseBox будет отображать выбранное значение. Формировать отображаемое значение можно при помощи комбинации строковых констант и значений любых полей той строки, из которой производится выбор. Имена полей оформляются в строке отображения в фигурных скобках, а строковые константы — напрямую. Таким образом, пример строки отображения для вывода данных о сотруднике (строка секции Emploees из справочника сотрудникорв — RefStaff) может выглядеть так:

Фамилия:{LastName}_Имя:{FirstName}_Отчество:{MiddleName}

Свойства CommandMenuStrip и ContextMenuStrip позволяют сформировать контекстные меню для кнопки выбора и отображаемого значения соответственно. Для реализации самих контекстных меню используется стандартный элемент управления Microsoft ContextMenuStrip. Его необходимо предварительно добавить на форму карточки и настроить его свойства (добавить пункты меню), а также создать обработчики для событий выбора пунктов меню. Готовый и настроенный элемент управления можно указать в качестве значения свойства CommandMenuStrip или ContextMenuStrip.

В случае использования меню команд выбора CommandMenuStrip, стандартный значок кнопки выбора будет заменён на иконку первого из пунктов контекстного меню.

Другие свойства элемента управления BoundChooseBox:
  • Caption — заголовок окна выбора.

  • HideNotAvailable — признак не показывать скрытые элементы для выбора.

  • SearchDelimiter — разделительный символ для быстрого поиска.

    Элемент управления позволяет выполнять быстрый поиск по всем полям, указанным в строке отображения, в порядке их следования. Для разделения этих полей при вводе используется этот символ.

    По умолчанию это пробел.

  • SearchSubstring — для быстрого поиска по Ctrl+K. Признак, искать ли вхождение подстроки только сначала или в любом месте.

    По умолчанию значение равно false, то есть поиск ведется только по первым символам.

  • Text — отображаемое значение элемента управления.

  • Value — выбранное значение (идентификатор).

Методы

  • System.Guid ChooseValue() — инициирует процесс выбора значения.

  • QuickSearch() — инициирует быстрый поиск по введённому тексту.