2017-10-21 7 views
1

만약 angel 8 다시 적용 필터에 :나는 다음과 같은 내 그리드에 필터를 추가 한 방법 그리드

filterTextField.addValueChangeListener(event -> { 
     myListDataProvider.addFilter(
       columnName, 
       value-> value.toLowerCase().contain(filterTextField.getValue())); 
    }); 

이 세트를 필터를 적용합니다. 그러나 나중에 나는 그런 그 항목의 재 장전 필요로 그리드에 대한 작업 수행 : 나는 filterTextField 물론이고이 여전히 채워 할 그리드가 다시로드되면

grid.setItems(reloadItemsDueToAction()); 

는, 그러나 문제가 있다는 것입니다을 나는 돈 ListDataProvider에 설정된 필터를 다시 적용하여 그리드가 filterTextField에 따라 다시 필터링되도록하는 방법을 알고 있습니다. 필터는 여전히 ListDataProvider에서 설정해야하지만 어떻게 그리드에 적용합니까?

+1

일반적으로 ['dataProvider.refreshAll()'] (https://vaadin.com/api/8.1.5/com/vaadin/data/provider/DataProvider.html#refreshAll--)를 호출하면 'DataChangeEvent', 그리드가이를 받아 UI를 업데이트합니다. 데이터가'grid.setItems (...) '호출을 요구하기 위해 어떻게 바뀌나요? – Morfic

+0

새로 고침 전체 호출()이 작동하지 않습니다. 예제 작업은 작업의 세부 사항에 따라 하나의 데이터베이스 테이블에서 다른 데이터베이스 테이블로 데이터가 전송되는 작업으로, 그리드를 다시로드하는 것이 더 쉽습니다. 문제는 그리드를 다시로드 할 때 필터가 TextField에서 계속 볼 수 있지만 더 이상 그리드에 적용되지 않는다는 것입니다. –

+0

데이터 공급자를 사용하여 DB 또는 다른 데이터에서 데이터를 검색하고 있습니까? 나는 당신이 [sscce] (http://sscce.org)를 제공 할 수 있다면 더 쉬울 것이라고 느낀다. – Morfic

답변

1

은 현재 (8.1.5)은 단지 예를 들어, 다시 DataProvider에와 필터를 설정함으로써 가능하다 나에게 보인다

private ListDataProvider<Entity> ldp 
    = new ListDataProvider<>(getGridItems()); // initial grid data 

// then somewhere update grid & re-apply filters 

SerializablePredicate<Entity> filter = ldp.getFilter(); // store filter 
ldp = new ListDataProvider<>(getGridItems()); // new ldp with fresh data 
grid.setDataProvider(ldp); // instead of setItems() 
if(filter!=null) ldp.addFilter(filter); // re-apply stored filter 

이 같은 패션 Table/Container으로 이전도 적용했다.

당신이 setItems()를 사용하는 경우 내가 Grid 더 이상 이전 DataProvider을 사용하고 Grid로 전파되지 않습니다 이전 DataProvider에 필터를 설정하지 않는 것 같아요. 여러 필터를 테스트

ListDataProvider<Entity> ldp = ((ListDataProvider<Entity>)g.getDataProvider()); 
SerializablePredicate<Entity> filter = ldp.getFilter(); 
grid.setItems(getGridItems()); 
ldp = ((ListDataProvider<Entity>)g.getDataProvider()); 
if(filter!=null) ldp.addFilter(filter); 

모두 : 당신이 정말로 다음과 같은 아마 뭔가를 setItems()를 사용해야 할 경우 나는 그것이 현명하다 알고 있지만하지 않습니다.