Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 如何防止SelectionChangehander触发后重新绘制CellTable行元素?_Gwt_Celltable - Fatal编程技术网

Gwt 如何防止SelectionChangehander触发后重新绘制CellTable行元素?

Gwt 如何防止SelectionChangehander触发后重新绘制CellTable行元素?,gwt,celltable,Gwt,Celltable,我可能做错了其他事情,但我遵循了这里给出的示例: 和 完成我的目标,结果很接近,但并不完全正确 我有一个包含两个小部件的页面。第一个wiget包含一个CellTable,它使用异步ListDataProvider来获取结果并填充表。该表有一个与之关联的选择更改事件处理程序,该处理程序将有关所选项目的更多详细信息加载到它下面的第二个小部件中 public OrderAdminTable() { selectionModel.addSelectionChangeHandler(new S

我可能做错了其他事情,但我遵循了这里给出的示例:

完成我的目标,结果很接近,但并不完全正确

我有一个包含两个小部件的页面。第一个wiget包含一个CellTable,它使用异步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);
}
一旦第二个小部件加载了关于所选项目的详细信息,用户可以通过单击两个小部件的父部件根面板中的按钮从表/列表中删除该项目

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");
                    }
                }
            }
        }
    });
在您选择表中的另一项之前,这一切都可以正常工作。发生这种情况时,selection change事件似乎会重新绘制表,并从以前选择的项中删除我的自定义属性和类。这使它再次出现在列表中

这里的最终目标是避免在从列表中删除项目时往返服务器以获取新结果。行searchView.getOrderAdminSnapshot.reviewOrder;进行web服务调用,从服务器端的数据中删除该项,使其不会出现在后续的重新加载中


是否有办法强制选择更改事件保持以前选择的表行的状态?是否有更好的方法从列表中删除所选项目?任何建议都将不胜感激。

一旦您从列表dataProvider.getList.remove中删除该对象,它将从表中消失。没有必要隐藏该行-该行应消失。所以你的循环应该永远找不到它。

真的吗?我一定没有正确地得到我的列表。My dataprovider是一个名为OrderAdminListDataProvider的自定义ListDataProvider,它扩展了AsyncDataProvider。我必须在扩展类中实现getList,所以我一定是做错了什么。谢谢你的洞察力!