gpt4 book ai didi

java - 在 CellTable 中添加并排序的行

转载 作者:行者123 更新时间:2023-12-01 14:02:23 24 4
gpt4 key购买 nike

我想在添加新行时对 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<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()方法来按多列排序。您还可以对同一列调用两次以反转其排序顺序(升序/降序)。

关于java - 在 CellTable 中添加并排序的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19257216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com