X ++:从代码中突出显示网格中的所有记录(包括未加载的代码)

时间:2015-01-09 09:34:01

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

我无法锻炼这个看似简单的任务。我有一个名为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,可以在某些表单上找到第一个字段,一旦选中,选择所有记录,也可以这样做,但我找不到如何将其添加到我的自定义表单?虽然也许这个选项也只选择加载的记录,所以它不会对我现在拥有的东西产生影响。

1 个答案:

答案 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;
}