2016-04-19 2 views
3

Я в настоящее время работаю в проблему со следующей ситуацией:Выделите запись в сетке по форме открытой

У меня есть правильное событие щелчка, который выполняет статический метод «inventTransferOrder». В том, что у меня есть следующий код:

select firstOnly invTransLine 
where invTransLine.TransferId == invTrans.TransferId 
    && invTransLine.LineNum == invTransLineNum; 

args.record(invTransLine); 

new MenuFunction(menuitemDisplayStr(InventTransferOrder), MenuItemType::Display).run(args); 

В (InventTransferOrders, предписывающие за пункт меню InventTransferOrder) формы в метод инициализации Я выполняющийся следующий код:

InventTransferLine  invTransLine; 
QueryBuildDataSource qbds; 
QueryBuildRange   qbr; 
; 

invTransLine = element.args().record(); 

qbds = InventTransferLine_Q.dataSourceTable(tableNum(InventTransferLine)); 
qbr = qbds.addRange(fieldNum(InventTransferLine, LineNum)); 
qbr.value(strFmt('%1', invTransLine.LineNum)); 

Это делает точно то, что он должен делать: он фильтрует сетку, используя источник данных «InventTransferLine» для одной записи с соответствующим LineNum.

В отличии от этого, мне нужно, чтобы показать всех записей (InventTransferLine получает предварительно фильтр, чтобы показывать только строки для записи InventTransfer, который выбран) НО одна записи с согласующей LINENUM должна быть выделены так, что пользователь может сразу начать работать с этой строкой.

Может ли кто-нибудь помочь мне с этим?

Я использовал следующий код, но он (визуально) ничего не делает:

InventTransferLine_DS.findRecord(invTransLine); 
InventTransferLine_DS.mark(true); 

Я был бы признателен за любую помощь.

Большое спасибо и приветствую

ответ

2

Это проблема с синхронизацией. Перезапишите метод executeQuery источника данных InventTransferLine и установите там контрольную точку. Также поставьте точку останова в методе init, где вы написали свою модификацию. Вы увидите, что точка останова в init получает первый удар, а затем точку останова в executeQuery. Это означает, что executeQuery удаляет все выбранные вами и ранее отмеченные маркировки.

Если вы внесете свою модификацию в метод executeQuery после вызова super(), ваш выбор и маркировка должны оставаться. Конечно, вы не хотите выполнять эту модификацию каждый раз, когда вызывается executeQuery, поэтому вам придется добавить дополнительную логику.

+0

Вау, это довольно простое и понятное решение. Я просто переместил вызов метода и метода из формы/init в datasource/executeQuery, и он работает отлично. TIL executeQuery удаляет предыдущую маркировку/выборку. Большое спасибо! – Tekumi

Смежные вопросы