我无法锻炼这个看似简单的任务。我有一个名为PrintAll的自定义CheckBox,我想要的是一旦它被选中,网格中的所有行都被选中/突出显示。这是我尝试过的:
选项1:传递CTRL + SHIFT + END。以下示例通过了CTRL + A组合。
public boolean modified()
{
boolean ret;
ret = super();
#task
if(PrintAll.value())
{
// CTRL+A
element.task(#taskSelectAll);
}
return ret;
}
结果: 仅选择已加载的记录,因此请说出500中的20个。如果向下滚动,则会继续选择即将发生的记录。
CTRL + SHIFT + END组合可以在UI中使用,虽然它给出了这个Box :: yesNo:
你不能选择包括最后一行在内的所有行,而不是全部 目前已加载行。加载所有行可能 需要一些时间!
您想继续选择行并立即加载所有行吗?
当我测试taskid
CTRL + SHIFT + END得到的内容时,它似乎得到2842,不幸的是在代码中使用此ID,因为element.task(2842);
仅突出显示第一条记录。
因此,如果不是CTRL + A,我可以正确地提交CTRL + SHIFT + END,问题就会解决。
编辑: (部分解决方案) 运行element.task(2842);
两次让我听到上面的警告,所以我可以点击是并且选择所有行。有谁知道我怎么能绕过这个警告?
选项2:尝试使用表单和数据源的各种属性,使其加载所有可用的记录,而不是前20个。
结果: 没有任何效果。
选项3:也许是CheckBox,可以在某些表单上找到第一个字段,一旦选中,选择所有记录,也可以这样做,但我找不到如何将其添加到我的自定义表单?虽然也许这个选项也只选择加载的记录,所以它不会对我现在拥有的东西产生影响。
答案 0 :(得分:1)
这最终对我有用(source)。请注意,InventDim不是此表单中的主要数据源。 InventTransOrigin是那个,但它没有用。
所以我想,如果您不想向最终用户显示任何警告,您可以使用此方法:
public boolean modified()
{
InventDim inventDimTMP;
boolean ret;
ret = super();
if(PrintAll.value())
{
inventDimTMP = InventDim_DS.getFirst();
while(inventDimTMP)
{
InventDim_DS.findRecord(inventDimTMP);
InventDim_DS.mark(true);
inventDimTMP = InventDim_DS.getNext();
}
}
return ret;
}
如果您希望他们看到上面提到的警告,请执行此操作:
public boolean modified()
{
boolean ret;
ret = super();
if(PrintAll.value())
{
// Marks first record
element.task(2842);
// Marks all records
element.task(2842);
}
return ret;
}