GWT过滤表后排序

时间:2015-10-13 06:59:35

标签: gwt

我有一个简单的表(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中排序并显示已过滤的列表而不是原始列表。

请帮忙。

2 个答案:

答案 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);