在窗体打开时突出显示网格中的记录

时间:2016-04-19 11:37:57

标签: axapta dynamics-ax-2012 x++

我目前遇到以下情况的问题:

我有一个右键单击事件,它执行一个静态方法“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后面)init方法我正在执行以下代码:

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);

我很感激任何帮助。

非常感谢和亲切的问候

1 个答案:

答案 0 :(得分:2)

这是一个时间问题。覆盖executeQuery数据源的InventTransferLine方法并在其中放置断点。还在您编写修改的init方法中放置了一个断点。您将看到init中的断点首先被击中,然后是executeQuery中的断点。这意味着executeQuery会删除您之前完成的所有选择和标记。

如果您在executeQuery来电后使用super()方法进行修改,则您的选择和标记应保留。当然,每次调用executeQuery时都不希望执行此修改,因此您必须添加一些额外的逻辑。