【发布时间】:2015-11-06 21:54:36
【问题描述】:
我可能做错了什么,但我遵循了这里给出的例子:
How to remove a row from the Cell Table 和 GWT get CellTable contents for printing or export
完成我的目标,结果很接近但不太正确。
我有一个带有两个小部件的页面。第一个 wiget 包含一个 CellTable,它使用 aSync ListDataProvider 来提取结果并填充表格。该表有一个与之关联的选择更改事件处理程序,它将有关所选项目的更多详细信息加载到其下方的第二个小部件中。
public OrderAdminTable() {
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
OrderAdminListProxy selected = selectionModel.getSelectedObject();
if (selected != null && orderSnapShot != null) {
orderSnapShot.loadSnapShot(selected);
}
}
});
initTable();
this.addStyleName("order-list fixed_headers BOM");
this.setSelectionModel(selectionModel);
}
一旦第二个小部件加载了有关所选项目的详细信息,用户可以通过单击作为两个小部件父级的 RootPanel 中的按钮从表/列表中删除该项目。
searchView.getCmdReview().addClickHandler(new ClickHandler() {
@Override public void onClick(ClickEvent event) {
searchView.getOrderAdminSnapshot().reviewOrder();//this line calls a web service that deletes the item from the server data
dataProvider.getList().remove(searchView.getOrderAdminSnapshot().getSelectedOrder());
for(int i=0;i<table.getRowCount();i++){
TableRowElement row = table.getRowElement(i);
for(int j=0;j<row.getCells().getLength();j++){
if(row.getCells().getItem(j).getInnerText().contains(searchView.getOrderAdminSnapshot().getSelectedOrder().getSalesOrderNumber())){
row.setAttribute("removed", "true");
row.addClassName("hidden");
}
}
}
}
});
这一切正常,直到您在表格中选择另一个项目。发生这种情况时,选择更改事件似乎会重新绘制表格并从先前选择的项目中删除我的自定义属性和类。这使它再次出现在列表中。
这里的最终目标是当您从列表中删除项目时,避免往返服务器以获取新结果。行“searchView.getOrderAdminSnapshot().reviewOrder();”进行 Web 服务调用,从服务器端的数据中删除该项目,使其不会出现在后续重新加载中。
有没有办法强制选择更改事件保持之前选择的表格行的状态?有没有更好的方法从列表中删除所选项目?任何建议将不胜感激。
【问题讨论】: