|
15.03.2011, 15:44 | #1 |
Участник
|
Значение n-ой колонки списка ComboBox
Добрый день.
Подскажите, как можно получить соответствующее значение из НЕпервой колонки списка ComboBox после выбора некоторой строки из этого списка. Т.е. например есть поле со списком. В поле отображается ФИО. В списке отображаются и ФИО и должность. После выбора из списка другого ФИО хотелось бы без дополнительных запросов, прямо из списка, используя какое-либо его свойство, получить должность из второй колонки строки выбранного ФИО. Возможно ли это? Спасибо. |
|
15.03.2011, 16:26 | #2 |
MCTS
|
В контроле ComboBox нет колонок. Возможно, имеется ввиду ListView?
__________________
Dynamics AX Experience |
|
15.03.2011, 16:28 | #3 |
MCP
|
Если lookup перекрыт на контроле или используется какая-нибудь lookup форма, то можно так:
X++: public void lookup() { SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(EmplTable), this); query query = new query(); queryBuildDatasource qbds; ; sysTableLookup.addLookupfield(fieldNum(EmplTable, <1>)); sysTableLookup.addLookupfield(fieldNum(EmplTable, <2>), true); // true - указывает что после выбора нужно вернуть значение этой колонки qbds = query.addDataSource(tablenum(EmplTable)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } |
|
15.03.2011, 16:34 | #4 |
Участник
|
Прошу прощения, речь шла именно о lookup-выпадающих списках, ComboBox тут не причём.
Цитата:
sysTableLookup.addLookupfield(fieldNum(EmplTable, <поле2>), true); // true - указывает что после выбора нужно вернуть значение этой колонки
|
|
15.03.2011, 16:37 | #5 |
MCP
|
Поставьте ему свойство autodeclaration = true, и обращайтесь из любого места формы <нужное значение> = <имя контрола с перекрытым методом>.text();
|
|
15.03.2011, 16:43 | #6 |
Участник
|
Тогда получается, что я не смогу получить значение первой колонки, а мне нужны значения и первой колонки (сохраняется в поле, к которому прикреплён лукап), и второй колонки с должностью.
|
|
15.03.2011, 16:47 | #7 |
Участник
|
Цитата:
если так, то почему бы не навесить на этот контрл Modified? не выход? |
|
15.03.2011, 16:43 | #8 |
Участник
|
Скорее всего имелся в виду самый обычный lookup c гридом из нескольких полей. Если так то ответ нет, стандартно такое сделать не получиться. Стандартный механизм работы c lookup окнами не предаставляет доступ программисту к процессу получения значения из lookup формы. Можно запрограммировать передачу значения, но вот запрограммировать получение этого значения на основной форме не выйдет.
К том уже, если я правильно вас понял, при таком подходе вы принуждаете пользователя пользоваться lookup'ом, и лишаете ручного ввода. Не создавайте себе лишних проблем. Инициализируйте второе поле в методе modifiedField первого. |
|
18.03.2011, 14:22 | #9 |
Участник
|
извлечение через FormRun?
Цитата:
Сообщение от S.Kuskov
Скорее всего имелся в виду самый обычный lookup c гридом из нескольких полей. Если так то ответ нет, стандартно такое сделать не получиться. Стандартный механизм работы c lookup окнами не предаставляет доступ программисту к процессу получения значения из lookup формы. Можно запрограммировать передачу значения, но вот запрограммировать получение этого значения на основной форме не выйдет.
Если речь идет об обычном lookup - то получить значения курсора выбранной в lookup позиции в вызывающей форме в большинстве случаев все-же возможно, для этого нужно лишь получить экземпляр FormRun этой lookup формы, а дальше извлечь из него текущий курсор необходимого источника данных. Попробую схематично набросать то что имелось в виду: 1. В classDeclaration определяется переменная для сохранения дескриптора lookup формы: X++: public class FormRun extends ObjectRun { FormRun lookupFormRun ; } X++: public void performFormLookup(FormRun _form, FormControl _formControl) { super(_form, _formControl); lookupFormRun = _form ; } X++: Common lookupCursor ; ; ... super() ; if( lookupFormRun && lookupFormRun.closedOk() ) { // выбор из lookup формы lookupCursor = lookupFormRun .dataSource().cursor() ; ... // обработка данных извлеченного курсора ... } else { // 'ручной' ввод ... } ... lookupFormRun = null ;
__________________
Dynamics AX 4.0 SP2 |
|
|
За это сообщение автора поблагодарили: kitty (1), S.Kuskov (1), Player1 (2), Cardagant (1), SuperStar88 (1). |
24.04.2013, 13:15 | #10 |
Участник
|
Спасибо за предложенное работающее решение.
Возник такой вопрос: Метод performFormLookup() вызывается только если лукап перекрыт, тк это метод класса SysTableLookup. Если же лукап стандартный(автоматически созданный аксаптой по relation на таблице), можно ли как-то добраться до выбранной в нем записи? |
|
15.03.2011, 16:49 | #11 |
Участник
|
Изначально так и было сделано.
А вопрос возник из-за проблемы: в списке сотрудников есть полные тёзки, но с разными должностями. В поле, на котором есть лукап с колонками ФИО и Должность, выбирается ФИО. А в другое поле по modified контрола с ФИО выбирается должность. Но должностей по этому ФИО несколько, и выбраться может не та, по которой собственно щёлкнул пользователь при выборе ФИО. Хотя при выборе ФИО пользователь свой выбор уже конкретизировал. |
|
15.03.2011, 16:59 | #12 |
Участник
|
тоды есть вариант вызывать не лукап а форму (и с нее перехватить курсор). решал уже такую задачку....
если надо могу скинуть пример |
|
15.03.2011, 18:08 | #13 |
Участник
|
Цитата:
Сообщение от DesertBrowser
вопрос возник из-за проблемы: в списке сотрудников есть полные тёзки, но с разными должностями. В поле, на котором есть лукап с колонками ФИО и Должность, выбирается ФИО. А в другое поле по modified контрола с ФИО выбирается должность. Но должностей по этому ФИО несколько, и выбраться может не та, по которой собственно щёлкнул пользователь при выборе ФИО. Хотя при выборе ФИО пользователь свой выбор уже конкретизировал.
P.S.: Ещё вспомнилось свойство AliasFor на поле таблицы. Не совсем то конечно, но может пригодиться Последний раз редактировалось S.Kuskov; 15.03.2011 в 18:18. |
|
15.03.2011, 18:27 | #14 |
Участник
|
Посмотрите использование метода waitAndSearch класса TableLookup_RU
__________________
Sergey Nefedov |
|
16.03.2011, 11:35 | #15 |
Axapta Retail User
|
Цитата:
Сообщение от DesertBrowser
Изначально так и было сделано.
А вопрос возник из-за проблемы: в списке сотрудников есть полные тёзки, но с разными должностями. В поле, на котором есть лукап с колонками ФИО и Должность, выбирается ФИО. А в другое поле по modified контрола с ФИО выбирается должность. Но должностей по этому ФИО несколько, и выбраться может не та, по которой собственно щёлкнул пользователь при выборе ФИО. Хотя при выборе ФИО пользователь свой выбор уже конкретизировал. |
|
16.03.2011, 13:11 | #16 |
Участник
|
Цитата:
Цитата:
У вас явная архитектурная ошибка.
Спасибо за ответы, буду разбираться с методом waitAndSearch класса TableLookup_RU |
|
16.03.2011, 13:22 | #17 |
Участник
|
А не проще сделать выбор сотрудника в отдельном новом поле и по нему заполнить имя и должность?
__________________
Ivanhoe as is.. |
|
16.03.2011, 14:19 | #18 |
MCP
|
Цитата:
Да, к сожаоению, так реализован функционал "Должностные лица".
|
|
16.03.2011, 15:08 | #19 |
Участник
|
Цитата:
А не проще сделать выбор сотрудника в отдельном новом поле и по нему заполнить имя и должность?
Цитата:
А почему не хотите возвращать recId выбранного значения в лукапе? Или запись в emplTable не позволяет узнать должность сотрудника?
По recid можно определить должность в таблице сотрудников. А вернуть recid в лукапе проще, чем должность? Или Вы предлагаете возвращать только recid (что аналогично возврату кода сотрудника)? |
|
16.03.2011, 15:30 | #20 |
Участник
|
Цитата:
Заодно исправите формы - сейчас методы прописаны на контролах, что вообще неверно. Переделайте на DS, а лучше на таблицу - и будет везде работать.
__________________
Ivanhoe as is.. |
|