14.01.2004, 20:19 | #1 |
Участник
|
Динамическое создание DataSource на форме, и добавление элементов дизайна.
В методе init формы пытаюсь добавть DataSource, и поля этого DS положить на грид на форме.
Написал следующее: PHP код:
Так что пришлось положить на грид Control типа StringEdit, под названием formControl0 (EDT, например, Name), а из кода уже после него добавлять остальные, нужные, поля. Далее, теперь грид формируется правильно (т.е., содержит одно ненужное и два нужных поля), однако не отображает данные из соответствующей таблицы. Если я такой же набор полей (со сходными свойствами) формирую в гриде вручную, в дизайне, то данные отображаются. Возможно, некорректно устанавливается свойство DataSource грида.. Объясните пожалуйста, чего не хватает (или что я сделал не так). |
|
14.01.2004, 20:34 | #2 |
Участник
|
Коллега! Рекомендую посмотреть код формирования списка должностных лиц при печати складских журналов. Думаю там все найдешь. Класс называется InventJournalPrintForm_RU. Метод run. Идея состояла в следующем: Для складского журнала может формироваться 1..n отчетов. Каждый отчет содержит свой список должностных лиц. Потому кнопку диалога была повешена форма в которую динамически набрасывались tabPages, на них в свою очередь grids, которые привязывались к своим источникам данных. Вот такая штука.
P.S. Это верно для версии 3.0 SP1 и старше. |
|
15.01.2004, 10:56 | #3 |
NavAx
|
Или посмотрите класс SysTableBrowser (браузер таблиц), там практически все, что Вам нужно.
__________________
Чудес не бывает (c), истина где-то рядом (c)... |
|
15.01.2004, 17:36 | #4 |
Участник
|
Спасибо, посмотрел эти классы, понял, насколько был неправ при написании кода до этого . Но проблему не решил.
Моя ситуация немного отличается. В данных классах сначала создаётся объект Form, затем на него вешаются DataSource и FormControls, затем на основе этого Form создаётся FormRun, и запускается на выполнение. В моём же случае, нужно изменить структуру формы из самой этой формы. (Изначально вопрос возник из размышлений на тему, возможно ли сделать относительно универсальный лукап, отсюда и привязка всех действий непосредственно к лукап-форме). Всё, что нашёл в Аксапте на эту тему - кратенькое замечание в developer's guide про медот формы init() : "Before the super() call in the method, you can modify the form using the FormBuild system class." Какие ещё будут соображения по этому поводу? |
|
15.01.2004, 18:13 | #5 |
Участник
|
Попробуйте ваши действия по добавлению динамических элементов производить до супера в init()....
|
|
15.01.2004, 19:23 | #6 |
Участник
|
Пробовал, при запуске формы аксапта вылетает.
PHP код:
|
|
16.01.2004, 11:23 | #7 |
Участник
|
Непосредственно на форме не выйдет. Но форму можно создать в классе, как это обсуждалось ранее. Далее этот класс использовать в lookup методе формы. Так как это делается в перекрытых методах lookup.
|
|
16.01.2004, 12:39 | #8 |
Banned
|
Решал я такую задачу. Все можно сделать, и притом из самой формы. Как было правильно замечено, модифицировать дизайн надо перед super() в init(). Работа идет с классом Form form = formRun.form(). Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу:
PHP код:
PHP код:
|
|
16.01.2004, 12:59 | #9 |
Участник
|
Спасибо, Женя, был не прав
|
|
19.01.2004, 17:36 | #10 |
Участник
|
Спасибо, всё получилось.
|
|
07.02.2005, 17:22 | #11 |
NavAx
|
Цитата:
Изначально опубликовано EVGL
Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу. При этом в новую копию формы передать тот же args. Зачем это надо? - можно без кастомизация формы динамически добавлять функциональность (по типу как сделан SysListPanel).
__________________
С уважением, Игорь Ласийчук. |
|
|
За это сообщение автора поблагодарили: (1). |
24.11.2010, 13:42 | #12 |
Гость
|
Цитата:
добавил контрол на форму, и пытаюсь обратиться к нему из метода init() |
|
24.11.2010, 15:31 | #13 |
Developer
|
Цитата:
Представьте, что экземпляры объектов, таких как DataSource, DataSource_DS, DataSource_Q, DataSource_QR, и экземпляры контролов с AutoDeclaration = Yes, хранятся некоторым списком. Сами переменные, используемые в коде формы, имеют смысл ссылок на позицию (адрес) в этом списке. При чем экземпляры объектов для источников данных хранятся перед контролами. При добавлении нового источника данных у формы "создаются новые" экземпляры объектов, которые сдвигают контролы в списке. Естественно указатели на контролы становятся неверными, поэтому и возникают ошибки при обращении к ним. В вашем случае - при обращении к StaticText. Решение: либо добавить нужное количество источников данных на форму заранее в репозитарий, либо, если первое не возможно, как минимум отказаться от использования контролов с AutoDeclaration = Yes (данным путем не ходил, возможно потребуется ввести и другие ограничения) Последний раз редактировалось vallys; 24.11.2010 в 16:03. |
|
|
За это сообщение автора поблагодарили: gl00mie (5), S.Kuskov (10), (1). |