我创建了一个查找字段,用于过滤表单上的数据,但在我进行第一次选择后,它会过滤网格上的数据,然后该字段将无法编辑。
我尝试过clearRanges,我在修改后的方法调用executeQuery后完成了研究和刷新。
我有2个queryBuildDataSources:
public void executeQuery()
{
QueryBuildDataSource qbds1 = this.query().dataSourceTable(tableNum(SalesLine));
QueryBuildDataSource qbds2 = qbds1.addDataSource(tableNum(InventTable));
qbds2.fetchMode(JoinMode::InnerJoin);
qbds2.relations(TRUE);
qbds2.clearRange(fieldNum(InventTable, field1));
if (field.valueStr())
qbds2.addRange(fieldNum(InventTable,field1)).value(queryvalue(field.valueStr()));
super();
}
它不起作用,为什么不呢?
答案 0 :(得分:1)
您的代码无效,因为每次表单调用executeQuery
时都会添加关系。
要使其有效,请阅读:
public void init()
{
QueryBuildDataSource qbds2;
super();
qbds2 = this.query().dataSourceTable(tableNum(SalesLine)).addDataSource(tableNum(InventTable));
qbds2.fetchMode(JoinMode::ExistsJoin);
qbds2.relations(true);
}
public void executeQuery()
{
QueryBuildDataSource qbds2 = qbds1.dataSourceTable(tableNum(InventTable));
SysQuery::findOrCreateRange(qbds2, fieldNum(InventTable,field1)).value(queryvalue(field.text()));
qbds2.enabled(field.text() != '');
super();
}
InventTable
关系仅添加一次:init
方法SalesLine
。
此外,加入模式应为ExistsJoin
,因为您不需要InventTable
中的任何字段。
范围仅添加一次(使用findOrCreateRange
),并且仅当字段控件具有数据时才启用InventTable
存在连接。