2015-11-16 5 views
1

Я создал поле поиска, которое фильтрует данные в форме, но после того, как я делаю первый выбор, он фильтрует данные по сетке, а затем поле не редактируется.Поле фильтра не работает

Я пробовал 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

Можете ли вы отредактировать свой ответ и отформатировать его? –

+0

'public void executeQuery() {QueryBuildDataSource qbds1; QueryBuildDataSource qbds2; qbds1 = this.query(). DataSourceTable (tableNum (SalesLine)); 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() ' – AXING

ответ

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 включено, только если у элемента управления поля есть данные.

Смежные вопросы