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

Highlight a record in a grid on form open

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

我有一个执行静态方法的右键单击事件"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 记录的行)BUT 具有匹配 LineNum 的一条记录应该 突出显示 以便用户可以立即开始使用该行。

谁能帮我解决这个问题?

我使用了以下代码,但它(在视觉上)没有做任何事情:

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

如有任何帮助,我将不胜感激。

非常感谢和亲切的问候

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

如果您在 super() 调用之后将您的修改放在 executeQuery 方法中,您的选择和标记应该保留。当然你不希望每次 executeQuery 被调用时都执行这个修改,所以你将不得不添加一些额外的逻辑。