过滤字段不起作用

时间:2015-11-16 18:01:40

标签: axapta dynamics-ax-2009

我创建了一个查找字段,用于过滤表单上的数据,但在我进行第一次选择后,它会过滤网格上的数据,然后该字段将无法编辑。

我尝试过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();
}

它不起作用,为什么不呢?

1 个答案:

答案 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存在连接。