Добрый день!
Кто может подсказать как работать с выпадающим списком типа ILookupDataControl.
Например есть dataset ds_Offering (там есть поле ID и допустим Name).
- Добавляю элемент ILookupDataControl на форму
- Добавляю DatasetLink cо свойством Name = ds_Offering
- В свойствах ILookupDataControl, в DatasetLink выбираю добавленный DatasetLink (ds_Offering)
- В свойстве DataFieldName нет ни ID, ни Name
По какому принципу выпадающий список (ILookupDataControl) вообще работает? И как его правильно настроить?
Нравится
Здравствуйте.
Если Вы хотите добавить на форму поле со списком, то в Вашей таблице с полями Id, Name Вы должны добавить еще одно поле, к примеру ElementID, в которм будет храниться ID выбранного значения с этого списка. Сам список - это еще одна отдельная таблица(справочник) - Element.
Т.к. в итоге у Вас должно быть две таблицы: tbl_Element (Id, Name) и tbl_MyTable (Id, Name, ElementId). После этого в сервисе выборки данных (select query), кроме поля tbl_MyTable.ElementId, Вы должны добавить поле tbl_Element.Name, перед этим связав эти две таблицы в блоке "FROM" по tbl_Element.Id = tbl_MyTable.ElementId. Т.е. в итоге у Вас должно "выбираться" четыре поля:
Id (tbl_MyTable.Id),
Name (tbl_MyTable.Name),
ElementId (tbl_MyTable.ElementId),
ElementName (tbl_Element.Name)
После этого в сервис датасета необходимо добавить поле с типом справочник. Только такие поля можно выбирать в качестве связки с контролом LookupDataControl. В свойсвах этого поля необходимо указать колонку - ElementId, и поле для отображения - ElementName, а также указать датасет таблицы tbl_Element (к примеру ds_Element), и не забыть отметить признак "списком", если необходимо.
После этого в форму окна добавляете LookupDataControl, привязываете DatasetLink, и в свойстве DatasetField появится поле ElementId.
В Вашем же примере поля не отображались, т.к. поле Name - текстовое. Оно отобразиться в этом свойстве лишь для котрола соответсвующего типа - TextDataControl.
Также прилагаю ссылку на ILookupDataControl в SDK;
Если будут дополнительные вопросы - обращайтесь.
А есть ли возможность задавать параметры DatasetLink и DataFieldName программно (например при создании окна) ?
И еще, как можно реализовать ILookupDataControl для "Контрагентов", в котором бы выводился список всех контрагентов (но с определенным фильтром). Обычный способ не работает.
Александр,
1. Да, можно. Есть множество примеров в базовой конфигурации.
2. Что значит "обычный способ"? Фильтры накладываются функцией ApplyDatasetFilter() в обработчике события OnPrepareSelectWindow. Опять же, в базовой конфигурации есть много примеров.
Обычный способ в моем понимании.
У менять есть карточка "контрагенты" (ds_Accounts), я добавляю поле HoldingID в таблицу, запрос и датасет. (Источник данных для справочника тот же ds_Accounts, поле для отображения Name, Отображать как выпадающий список - активно). Далее настраиваю LookupDataControl.
Однако на форме, при изменении поля HoldingID изменяется поле Name. Т.е. они взаимосвязаны, есть предположение, что "указатель" на два ds_Accounts одинаковый.
Здравствуйте, Александр!
В Вашем случае, судя по всему, поле ссылается на ту же таблицу, в которой используется, что не есть правильно.
Как делать правильно можно посмотреть на примере поля "Ответственный" в контакте.
И в настройках лукап-поля "Поле для отображения" должно быть не "Name", "OwnerName" в данном примере.