我想对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());
}
});
并对列进行排序,但是如果我选择要在列中显示的下一个数据,它将被添加到列中的现有项目中,是否有人能够指出为什么会这样?
答案 0 :(得分:1)
第一个示例无效,因为您重新初始化了sort
对象:
sort = new ListHandler<M>(mList);
这将从sort
删除所有设置。
在第二个示例中,您需要调用
mList.clear();
在将新项目添加到此列表之前。另外,移动
table.addColumnSortHandler(sort);
从回调到您的create
方法。每次添加数据时都无需调用它。