我有一个简单的表(CellTable)和一个用于过滤的TextBox。
我从后端获取CellTable的值。加载项目列表后,我可以放一些过滤字符串来获得合适的结果。要从dataprovider中筛选列表,我使用谓词。过滤后,我将结果设置为CellTable。
喜欢这里:
<?php
$id=$_GET['id'];
?>
<form>
<input type="text" value="<?php echo $id ?>" name="id">
<label>Are you sure you want to remove this charity on your list?</label></form>
一切正常但我还有一个排序处理程序用于此表的第一列,当我想对列表进行排序时,我将对原始项目列表进行排序。
如何解决这个问题?这意味着我想从dataprovider中排序并显示已过滤的列表而不是原始列表。
请帮忙。
答案 0 :(得分:0)
我从服务器收到一些数据后有一个更改内容的表。这是我的方法:
public void onSuccess(List<List<String>> result) { List<Product> list = dataProvider.getList(); list.clear(); r_tableproducts.setRowCount(result.size()); for (List<String> l : result) { list.add(new Product(l)); } r_tableproducts.getColumnSortList().clear(); r_tableproducts.getColumnSortList().push(r_tableproducts.getColumn(1)); ColumnSortEvent.fire(r_tableproducts,r_tableproducts.getColumnSortList()); }
在重新获取新数据(覆盖所有旧数据)后,使用第二列对我的列表进行排序。
也许尝试这种方法?在新列表中过滤数据并修改dataProvider为您提供的列表,添加所有元素。
类似的东西:
List<CustomerDTO> result = Lists.newArrayList(Iterables.filter(this.dataProvider.getList(), filter)); this.customerList.setRowCount(result.size(), true); this.dataProvider.getList().clear(); this.dataProvider.getList().addAll(result);
答案 1 :(得分:0)
您需要分隔保存完整列表的dataProvider并提供单独的&#34;过滤&#34;将驱动cellTable显示的数据提供者。下面的示例中的cellTable绑定到filteredDataProvider以进行排序,显示。 下面的代码是提供一般性的想法,因此可能在语法上不准确。
void onFilterNameKeyUp(KeyUpEvent e) {
List<CustomerDTO> filtered = this.dataProvider.getList();
Predicate<CustomerDTO> filter = new Predicate<CustomerDTO>() {
@Override
public boolean apply(CustomerDTO input) {
if (input.getName() == null) {
return false;
} else {
return input.getName().toLowerCase()
.contains(filterName.getValue().toLowerCase());
}
}
};
filtered = Lists.newArrayList(Iterables.filter(this.dataProvider.getList(), filter));
this.customerList.setRowCount(filtered.size(), true);
this.filteredDataProvider.getList().clear();
this.filteredDataProvider.getList().addAll(filtered);
}
this.dataProvider = new ListDataProvider<CustomerDTO>();
// Code here to populate the dataProvider
this.filteredDataProvider = new ListDataProvider<CustomerDTO>();
// Creating separate DataProvider to hold the filtered set
this.filteredDataProvider.getList().addAll(this.dataProvider.getList());
filteredDataProvider.addDataDisplay(this.customerList);
// dataProvider.addDataDisplay(this.customerList);
// Sort Handler uses filteredDataProvider instead of the dataProvider with full list
final ListHandler<CustomerDTO> sortHandler = new ListHandler<CustomerDTO>(
this.filteredDataProvider.getList());
this.customerList.addColumnSortHandler(sortHandler);
this.customerList.getColumnSortList().push(this.rbKeyNameColumn);