我可能做別的錯誤的,但我已經按照這裏給出的例子:如何防止在SelectionChangehander觸發後重繪CellTable RowElement?
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服務調用,將服務器端的數據從項目中刪除,以免在隨後的重新加載中出現。
是否有某種方法來強制選擇更改事件來維護先前選擇的錶行的狀態?有沒有更好的方法從列表中刪除選定的項目?任何意見,將不勝感激。
真的嗎?我不能正確地獲取我的清單。我的數據提供者是一個名爲OrderAdminListDataProvider的自定義ListDataProvider,它擴展了AsyncDataProvider。我必須在擴展類中實現getList(),所以我必須在那裏做錯了什麼。感謝您的洞察力! –
Miniversal