【问题标题】:How to show rows-records between two tab form?如何在两个选项卡表单之间显示行记录?
【发布时间】:2015-04-24 01:01:14
【问题描述】:

在我的表单中,我有两个标签页,每个标签页都有相同的DataSource

TabPageA 我有我的DataSource 的所有记录。我选择了TabPageA 中的记录,我只想在TabPageB 中显示我之前在TabPageA 中选择的那些记录。

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

例如,如果在我的 GridA 中我选择了 Record#4 ,在 GridB 中我只看到 Record#4。

【问题讨论】:

  • 到目前为止你尝试过的任何东西`
  • 到目前为止你尝试过什么?
  • 我在 PropertiesTabPageB 中更改了 ParentPage。我设置了 TabPageA,但没有结果,我看到 TabPageB 中的所有记录。
  • 如果没有看到表单和标签页,这很难回答。也许你可以链接一些截图?或者您能否更详细地描述两个标签页显示的内容?例如,两个选项卡都使用网格吗?另外我认为你第二句话的最后一个词应该是TabPageA,而不是TabPageB
  • 嗨,FH-Inway,我把我的表单体放好了。在 GridA 中我选择了记录,在 GridB 中我只显示选择的记录。

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


【解决方案1】:

我认为您无法轻松过滤 TabPageBTabPageA,因为它们共享相同的数据源。

有两种快速修改方法。

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

public class FormRun extends ObjectRun

    {
        QueryBuildRange qbr;
    }

覆盖数据源的init。在这里您将设置 qbr:

public void init()
{
    super();
    qbr = this.queryBuildDataSource().addRange(fieldNum(SalesTable, RecId));
}

然后覆盖 pageActivated TabPage 方法为每个设置范围并根据自己的喜好重新执行查询:

TabPageA:

public void pageActivated()
{
    super();

    qbr.value('');

    SalesTable_ds.executeQuery();
}

TabPageB

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(), '"{}'));
}

这有点脏,但你明白了,可以根据需要清理它。

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

【讨论】:

  • 您好安德鲁,感谢您的帮助。我尝试了您的建议,但在我的 GridB 中,我看到了来自我的数据源的所有记录。
  • 我只想在 GridA (TabPageA) 中显示所选记录的信息
  • 例如,如果在我的 GridA 中我选择了 Record#4 ,在 GridB 中我只看到 Record#4。您可以在 GridA 中看到我有一些字段,在 GridB 中我有其他不同的字段(来自同一记录)。感谢您的关心!
  • 这实际上就是这样做的。当您切换标签页时,它会强制数据源将查询构建范围更新为仅在第一个网格中选择的第一个。只要是相同的数据源,字段不同就没有关系。我提出的一个稍微简单的选择是拥有两个单独的数据源,并且只有一个用于网格 b 的范围。
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
相关资源
最近更新 更多