Forms 如何显示两个选项卡窗体之间的行记录?

Forms 如何显示两个选项卡窗体之间的行记录?,forms,axapta,x++,dynamics-ax-2012,records,Forms,Axapta,X++,Dynamics Ax 2012,Records,在我的表单中,我有两个选项卡页,每个选项卡页都有相同的数据源 在TabPageA中,我拥有来自数据源的所有记录。我在TabPageA中选择记录,我只想在TabPageB中显示我之前在TabPageA中选择的记录 如果我没有在TabPageA中选择任何内容,则在TabPageB中看不到任何内容 例如,如果在我的GridA中选择Record4,在GridB中我只看到Record4。由于TabPageB和TabPageA共享相同的数据源,我认为您无法轻松地对它们进行不同的筛选 有两种快速的方法可以修改

在我的表单中,我有两个选项卡页,每个选项卡页都有相同的数据源

在TabPageA中,我拥有来自数据源的所有记录。我在TabPageA中选择记录,我只想在TabPageB中显示我之前在TabPageA中选择的记录

如果我没有在TabPageA中选择任何内容,则在TabPageB中看不到任何内容


例如,如果在我的GridA中选择Record4,在GridB中我只看到Record4。

由于TabPageB和TabPageA共享相同的数据源,我认为您无法轻松地对它们进行不同的筛选

有两种快速的方法可以修改它

将其作为一个数据源保存: 创建全局QueryBuildRange以轻松更新所选记录上的范围

public class FormRun extends ObjectRun

    {
        QueryBuildRange qbr;
    }
重写数据源的init。您将在此处设置qbr:

public void init()
{
    super();
    qbr = this.queryBuildDataSource().addRange(fieldNum(SalesTable, RecId));
}
然后覆盖每个页面的pageActivated TabPage方法,以设置范围并根据自己的喜好重新执行查询:

TabPageA:

TabPageB

更新范围的方法:

public void createRange()
{
    MultiSelectionHelper    multiSelectionHelper = MultiSelectionHelper::createFromCaller(this);
    common                  common;
    Set                     set = new Set(Types::Int64);

    // Necessary if the datasource you want is not the header datasource.
    multiSelectionHelper.parmDatasource(SalesTable_ds);

    common = multiSelectionHelper.getFirst();

    while (common)
    {
        // Use of set not necessary, but a little cleaner.
        set.add(common.RecId);

        common = MultiSelectionHelper.getNext();
    }

    qbr.value(strRem(set.toString(), '"{}'));
}
这是有点脏,但你得到的想法,可以清理它需要

两个数据源:
根据第一个数据源的多个选择更新TabPageB使用的第二个数据源上的范围。但我假设您出于某种原因只需要一个数据源。

到目前为止您尝试过的任何内容`到目前为止您尝试过的任何内容?我在父页面的PropertiesTabPageB中更改了。我设置了TabPageA,但没有结果,我看到了TabPageB中的所有记录。如果没有看到表单和选项卡页面,很难回答这个问题。也许你可以链接一些截图?或者你能更详细地描述一下这两个标签页显示的内容吗?例如,两个选项卡都使用网格吗?另外,我认为你第二句话的最后一个词应该是TabPageA,而不是TabPageB。嗨,顺便说一句,我把我的身体放进去了。在GridA中我选择了记录,而在GridB中我只显示所选的记录。嗨,安德鲁,谢谢你的帮助。我尝试了你的建议,但在我的GridB中我看到了数据源中的所有记录。我只想在GridA选项卡中显示所选记录的信息,例如,如果在我的GridA中我选择了Record4,在GridB中我只看到Record4。你们可以看到在GridA中我有一些字段,在GridB中我有来自同一记录的其他不同字段。谢谢你的关心!这实际上就是它的作用。切换选项卡页面时,它会强制数据源将查询生成范围更新为第一个网格中选定的第一个。只要字段是相同的数据源,字段不同就没有关系。我提出的一个稍微简单一点的选项是有两个独立的数据源,并且只有一个用于网格b的范围。
public void pageActivated()
{
    super();

    element.createRange();

    SalesTable_ds.executeQuery();
}
public void createRange()
{
    MultiSelectionHelper    multiSelectionHelper = MultiSelectionHelper::createFromCaller(this);
    common                  common;
    Set                     set = new Set(Types::Int64);

    // Necessary if the datasource you want is not the header datasource.
    multiSelectionHelper.parmDatasource(SalesTable_ds);

    common = multiSelectionHelper.getFirst();

    while (common)
    {
        // Use of set not necessary, but a little cleaner.
        set.add(common.RecId);

        common = MultiSelectionHelper.getNext();
    }

    qbr.value(strRem(set.toString(), '"{}'));
}