无法对celltable列进行排序

时间:2014-09-17 09:36:36

标签: java gwt

我想对celltable专栏进行排序,到目前为止已经写了这个,但它似乎没有起作用,我做了所有这些都像在gwt展示中使用celltable列排序:

ListHandler<M> sort;

public View() {

    getM(0,m);
    createM();
}
void createM() {

    Column<M, String> firstColumn = new Column<M, String>(
            new TextCell()) {

        @Override
        public String getValue(M object) {
            return object.getName();
        }

    };

    table.addColumn(firstColumn,"Name");
    firstColumn.setSortable(true);
    sort.setComparator(firstColumn, new Comparator<M>() {

        @Override
        public int compare(M m1, M m2) {

            return m1.getName().compareTo(m2.getName());
        }
    });

    void getM(int dataID, M m) {
    final ListDataProvider<M> listProvider = new ListDataProvider<M>();
    listProvider.addDataDisplay(table);
    listProvider.refresh();
    final List<M> mList = listProvider.getList();
    sort = new ListHandler<M>(mList);



    AsyncCallback<List<M>> callback = new AsyncCallback<List<M>>() {

        @Override
        public void onFailure(Throwable caught) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onSuccess(final List<M> result) {

            for (final M m : result) {

                mList.add(m);

            }

            table.addColumnSortHandler(sort);

        }

    };


        rpcService.getDataSource(dataID, m, callback);

任何建议,这里有什么问题?我该如何解决这个问题?

我将我的代码从getM()移动到createM()中,如:

void createM() {
final ListDataProvider<M> listProvider = new ListDataProvider<M>();
    listProvider.addDataDisplay(table);
    listProvider.refresh();
    final List<M> mList = listProvider.getList();
    sort = new ListHandler<M>(mList);
        Column<M, String> firstColumn = new Column<M, String>(
                new TextCell()) {

        @Override
        public String getValue(M object) {
            return object.getName();
        }

    };

    table.addColumn(firstColumn,"Name");
    firstColumn.setSortable(true);
    sort.setComparator(firstColumn, new Comparator<M>() {

        @Override
        public int compare(M m1, M m2) {

            return m1.getName().compareTo(m2.getName());
        }
    });

并对列进行排序,但是如果我选择要在列中显示的下一个数据,它将被添加到列中的现有项目中,是否有人能够指出为什么会这样?

1 个答案:

答案 0 :(得分:1)

第一个示例无效,因为您重新初始化了sort对象:

sort = new ListHandler<M>(mList); 

这将从sort删除所有设置。

在第二个示例中,您需要调用

mList.clear();
在将新项目添加到此列表之前

。另外,移动

table.addColumnSortHandler(sort);

从回调到您的create方法。每次添加数据时都无需调用它。