19.08.2003, 18:24 | #1 |
Гость
|
Ка программно изменить свойство JoinSource у DataSource формы
Пишу:
My_ds.JoinSource(Parent_ds); Проглатывает, но без нужного результата. Если же ручками JoinSource изменяю, то все хорошо :-( |
|
19.08.2003, 19:49 | #2 |
Moderator
|
Может попробовать решить задачу с помощью методов addLink, addDynalink ? Хотя я не знаю Вашей задачи и могу ошибаться.
|
|
19.08.2003, 20:38 | #3 |
----------------
|
JoinSource
Изменение joinSource и joinType из кода не дают никакого результата.
Следует изменять query в самом DS |
|
20.08.2003, 11:25 | #4 |
Гость
|
Задача для знающего может и простая, а для начинающего..... :-(
Есть DataSource 1. К нему через JoinSource привязан DataSource 2, к которому так же через JoinSource привязан DataSource 3. Мне необходимо DataSource 4 по нажатию на чек-бокс прикручивать и откручивать к DataSource 2, у которого (вернее у таблицы) есть relation c DataSource 4 (таблицы) по двум полям. |
|
20.08.2003, 13:44 | #5 |
Гость
|
Неужели никто не скажет.....
Как программно к одному источнику данных прикрутить два зависимых источника данных? Пробовал даже так: QueryBuildDataSource qbds; QueryBuildDataSource qbdsIS; QueryBuildDataSource qbdsIR; qry = new Query(); qbds = qry.addDataSource(TableNum(T1),"T1"); qbdsIS = qbds.addDataSource(TableNum(T2),"T2"); qbdsIS.relations(true); T2 к Т1 благополучно цепляется :-) Но если добавить и qbdsIR = qbds.addDataSource(TableNum(T3),"T3"); qbdsIR.relations(true); То и Т3 не цепляется, и Т2 благополучно отваливается :-( И обидно, что не программно, а ручками через датасорсе на форме все проходит..... |
|
20.08.2003, 15:09 | #6 |
Участник
|
Просто добавь fetchMode
PHP код:
|
|
|
За это сообщение автора поблагодарили: Oz (1). |
20.08.2003, 15:24 | #7 |
Гость
|
Большое человеческое СПАСИБО, действительно заработало.
|
|
07.03.2007, 11:11 | #8 |
MCTS
|
Добрый время суток!
Извиняюсь, но возможно не понимаю одной простой вещи. Как при программном связывании нескольких датасурсов указать, что данные датасурсы - это датасурсы из макета? Пример. На форме есть DataSource1 (родительский) и DataSource2 (подчиненный). В int-методе DataSource1 пишу: X++: public void init() { Query q = new Query(); QueryBuildDataSource qbds; ; super(); q = this.query(); qbds = q.addDataSource(tablenum(DataSource2), "DataSource2"); qbds.joinMode(JoinMode::OuterJoin); qbds.fetchMode(QueryFetchMode::One2One); qbds.relations(true); } |
|
07.03.2007, 11:19 | #9 |
Участник
|
1. А зачем вы их программно связываете? все эти свойства можно задать и в дизайне.
2. может просто свойство DataSource на гридах неверно установлено? |
|
07.03.2007, 11:32 | #10 |
Участник
|
Датасоурс, созданный в коде не имеет отношения к датасорсу в дизайне.
Если хотите их связывать программно, то указывайте свойство joinMode для датасорса из дизайна. Т.е. DataSource2_ds.JoinMode() и т.д.
__________________
Axapta v.3.0 sp5 kr2 |
|
07.03.2007, 11:37 | #11 |
Участник
|
Так Вы же не связываете два существующих DataSource, а добавляете новый (третий) DataSource. Естесственно, что тот DataSource который был добавлен в дизайне так и остается не связанным.
|
|
07.03.2007, 14:20 | #12 |
MCTS
|
Спастбо за ответы.
Владимир Максимов, AndyD, я, в-общем, так и предполагал, что в данном случае (при использовании addDataSource) нельзя присоединить уже существующий в макете датасурс. Теперь подтвердилось. AndyD, не совсем понятно про JoinMode. С его помощью, насколько я понимаю, возможно поменять тип связи (с OuterJoin на InnerJoin, например). Мне необходимо изменить сами связи (т.е. связать определенный DataSource с другим, отличным от изначального). kashperuk Просто на форме есть несколько повторяющихся датасурсов (несколько гридов на разных закладках), хотелось для повышения производительности убрать некоторые и динамически менять связи между ними (форма грузится очень долго). Понятно, что форму можно разбить на несколько мелких, но хотелось опробовать другие варианты и по возможности оставить все же одну. Последний раз редактировалось cherv; 07.03.2007 в 14:25. |
|
07.03.2007, 15:28 | #13 |
Участник
|
Цитата:
Сообщение от cherv
Просто на форме есть несколько повторяющихся датасурсов (несколько гридов на разных закладках), хотелось для повышения производительности убрать некоторые и динамически менять связи между ними (форма грузится очень долго). Понятно, что форму можно разбить на несколько мелких, но хотелось опробовать другие варианты и по возможности оставить все же одну.
Для этого, если эти дополнительные DataSource - "цепочки" связанных таблиц в событии DataSource.init() главной таблицы цепочки напиши PHP код:
PHP код:
В результате, по тем DataSource которые не нужны в данный момент не будет выполняться никаких запросов к серверу. Как следствие - уменьшается время открытия формы |
|
|
За это сообщение автора поблагодарили: kashperuk (2), cherv (1). |
07.03.2007, 16:45 | #14 |
MCTS
|
Владимир Максимов
Огромнейшее спасибо! Управление свойством AutoSearch решило часть проблем, над которыми бились уже много дней! |
|