如何在两个选项卡表单之间显示行记录?
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
使用)上的范围。但我假设您出于某种原因只需要一个数据源。
在我的表单中,我有两个 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
使用)上的范围。但我假设您出于某种原因只需要一个数据源。