我想在添加新元素时对CellTable中的行进行排序。
要标记UI,请使用UIBinder:
<g:HTMLPanel> <c:CellTable pageSize='100' ui:field='myTable'/> <c:SimplePager ui:field='myPager' location='CENTER'/> </g:HTMLPanel>
在小部件中,我创建了一个表格和分页:
@UiField(provided=true) CellTable<myDTO> myTable; SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); myPager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); myTable = new CellTable<myDTO>();
然后我安装了一个选择模型:
final NoSelectionModel<myDTO> selectionModel = new NoSelectionModel<myDTO>(); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { clickedObject = selectionModel.getLastSelectedObject(); } }); myTable.setPageSize(50); myTable.setSelectionModel(selectionModel);
并添加了几列:
Column<myDTO, String> column1 = new Column<myDTO, String>(new TextCell()) { @Override public String getValue(myDTO data) { return data.getSomeData1(); } }; Column<myDTO, String> column2 = new Column<myDTO, String>(new TextCell()) { @Override public String getValue(myDTO data) { return data.getSomeData2(); } }; ... Column<myDTO, String> columnN = new Column<myDTO, String>(new TextCell()) { @Override public String getValue(myDTO data) { return data.getSomeDataN(); } }; myTable.addColumn(column1, "name of column1"); myTable.addColumn(column2, "name of column2"); ... myTable.addColumn(columnN, "name of columnN");
接下来,我创建AsyncDataProvider:
AsyncDataProvider
AsyncDataProvider<myDTO> provider = new AsyncDataProvider<myDTO>() { @Override // is called when the table requests a new range of data protected void onRangeChanged(HasData<myDTO> display) { final int start = display.getVisibleRange().getStart(); final int lenght = display.getVisibleRange().getLength(); myService.findAll(new AsyncCallback<List<myDTO>>() { public void onFailure(Throwable caught) { // exception handling here } public void onSuccess(List<myDTO> data) { updateRowCount(data.size(), true); updateRowData(0, data); } }); } }; provider.addDataDisplay(myTable);
如果我使用这种方法,那么新行将添加到表的末尾。
添加时,我需要自动对行进行排序。
我该怎么做?
在创建提供程序之后立即创建排序处理程序:
ListHandler<myDTO> sortHandler = new ListHandler<myDTO>(provider.getList()); myTable.addColumnSortHandler(sortHandler);
然后为每个要作为排序依据的列设置一个比较器,并将该列添加到排序列表中,例如:
sortHandler.setComparator(column1, new Comparator<myDTO>() { public int compare(myDTO dto1, myDTO dto2) { // This is an example, how you compare them depends on the context return dto1.getSomeData1().compareTo(dto2.getSomeData1()); } }); myTable.getColumnSortList().push(column1);
您可以push()多次调用该方法以按多列排序。您也可以为同一列调用两次以反转其排序顺序(升/降)。
push()