如何在两个选项卡表单之间显示行记录?

How to show rows-records between two tab form?

在我的表单中,我有两个 TabPage,每个都有相同的 DataSource

TabPageA 我有我 DataSource 的所有记录。我 select 在 TabPageA 中记录,我只想在 TabPageB 中显示我之前在 TabPageA 中编辑的那些记录。

如果我在 TabPageA 中没有 select 任何东西,我在 TabPageB

中什么也看不到

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

我认为您无法轻松地以不同于 TabPageA 的方式过滤 TabPageB,因为它们共享相同的数据源。

有两种快速修改方法。

将其作为一个数据源: 创建全局 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 使用)上的范围。但我假设您出于某种原因只需要一个数据源。