27.11.2001, 17:01 | #1 |
Administrator
|
Создание Lookup формы
В качестве Lookup формы может выступать любая форма Axapta. Внедрение Lookup формы Существует два пути внедрения Lookup формы. Внедрение в качестве FormHelp для Extended Data Type. Если указать название формы в поле Form Help у Extended Data Type, во всех таблицах, где выполняется lookup по полю этого типа, будет использоваться указанная lookup форма. Внедрение непосредственно в Grid в методе lookup выбранного столбца. Метод lookup вызывается при нажатии на lookup-кнопку. Его метод super открывает стандартную lookup форму (grid с выбранными столбцами). Для использования другой формы следует вместо вызова метода super добавить вызов метода performFormLookup объекта, который осуществил вызов метода (то есть this.performFormLookup). В качестве параметра этому методу передаются объект типа FormRun, поэтому перед его вызовом необходимо создать форму, которая будет использоваться для lookup. Полный текст метода lookup может быть, например, таким: X++: void Lookup() { FormRun FR = New FormRun(New Args("ColorLookup")); FR.Init(); this.PerformFormLookup(FR); } Во-первых, следует изменить значение свойства Frame формы на Border или None, чтобы при ее вызове не появлялся заголовок. Форма должна закрываться методом CloseSelect(str). В качестве строки этому методу передается значение, которое будет результатом lookup. PerformFormLookup вызывает метод SelectMode у формы, переданной ему в качестве параметра. Этот метод переводит форму в SelectMode. SelectMode можно вызвать и самостоятельно. В качестве параметра следует передать FormControl. В этом случае можно не закрывать форму с помощью CloseSelect, а результат будет взят из поля value указанного Control. Форма, вызванная методом PerformFormLookup, закрывается автоматически при переводе фокуса. Эту проблему можно решить, например, используя дополнительный флаг, сообщающий о том, что выбор сделан. Теперь вызывать метод super у closeSelect следует только в том случае, когда флаг установлен. Пример смотрите в форме HB_Tutorial_CustomLookup. Изменение lookup-пиктограммы При использовании Extended Data Type появляется возможность изменять для полей этого типа lookup-пиктограмму, изображенную на кнопке, нажатие на которую вызывает lookup. Это делается изменением значения поля ButtonImage у Extended Data Type. Возможные значения: Arrow (по умолчанию), Mail, URL, Three Dots, Open File и Calendar. Использование группы полей AutoLookup для создания Lookup формы Стандартная Lookup форма вызывается, когда определен relation в таблице. Пусть Table1 и Table2 связаны relation Table2.ID == Table1.ID. В формах, использующих значение Table2.ID появиться возможность использовать стандартную Lookup форму. По умолчанию она будет состоять из Grid с одним столбцом Table1.ID. Можно расширить набор столбцов, добавив новые поля в группу AutoLookup у Table1 (разумеется, это должны быть поля Table1). Пример В качестве примера используйте проект Произвольная Lookup форма. |
|
|
За это сообщение автора поблагодарили: alex55 (1), refined (0). |
11.11.2003, 16:50 | #2 |
Участник
|
А как управлять сортировкой в LookUp-форме?
|
|
12.11.2003, 11:51 | #3 |
Участник
|
Перекрыть метод lookup у элемента, у которого выпадает lookup-форма:
PHP код:
А в таблицу PriceDiscAdmTable добавляем метод: PHP код:
|
|
01.12.2003, 17:52 | #4 |
Участник
|
А почему ширину полей руками менять нельзя в стандартном lookup-е ? Искал-искал в форуме, не нашёл как это сделать.
__________________
Дмитрий |
|
01.12.2003, 18:04 | #5 |
Участник
|
Как это сделать я не знаю.
Попробуй двойное нажатие левой кнопки мыши между названиями столбцов. Устанавливается ширина колонки равная самой длинной строке столбца. Но это помогает когда ты видишь не все данные в поле. |
|
|
За это сообщение автора поблагодарили: Logger (1). |
08.07.2004, 18:11 | #6 |
Участник
|
Сделал lookup, как описано выше .
Вопрос возник по фильтрованному спсику. Когда вводишь посредством спика, то все хорошо - список соответсвует критериям фильтра . Но остается одна лазейка - ввод вручную. В этом случае получиться ввести значение, которое не соответствует фильтру, главное чтобы оно просто было таблице-списке. Как закрыть эту лазейку? |
|
09.07.2004, 13:42 | #7 |
Administrator
|
Смотрите метод validateField у таблицы и DataSource
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
09.07.2004, 14:23 | #8 |
Участник
|
Максим прав, нужно перекрыть метод validateField .
Но, как в нём проверить, что полученное значение удовлетворяет критериям queryBuildRange? Есть разные пути решения этого вопроса, но универсального я не знаю. |
|
09.07.2004, 19:04 | #9 |
Участник
|
Существует 3-й способ внедрения Lookup формы, на источнике данных перекрыть метод Lookup, например \Forms\Address\Data Sources\Address\Fields\State\Methods.
Если не трудно можно поподробнее рассказать о таком варианте? |
|
26.06.2007, 16:44 | #10 |
Участник
|
Такой вопрос:
1. Создаю Форму. 2. Вставляю в нее datasource, grid, поля в grid. 3. Прописываю X++: this.selectMode(Grid_ItemId); Grid_ItemId.setFocus(); 5. Привязываю его непосредственно в HelpForm. В форме показывается только первое поле grid, хотя на самом деле вставляю их несколько. причем если не выставлять selectmode или не выставлять фильтр - результат от этого не меняется, просто значение не возвращается. |
|
Теги |
edt, grid, lookup, как правильно, форма |
|
|