如何在GXT网格中重新加载数据行?

时间:2011-02-09 10:11:15

标签: gwt grid gxt

假设使用RPCproxy从DataStore检索数据,请在打开页面时使用ListStore填充到网格。

然后,有一个表单来添加一个实体,修改后它将在GXT网格中反映出新添加的行列表。

如何重新加载网格?我在Grid中尝试了.reconfigure()方法,但没有用。

2 个答案:

答案 0 :(得分:4)

grid.getStore()getLoader()负载();

更新

首先,您必须在Proxy之前提取Grid,第二件事是更改RPC回调:

 
    public class PagingBeanModelGridExample extends LayoutContainer {  

    //put grid Class outside a method or declare it as a final on the begin of a method
    Grid grid = null;

    protected void onRender(Element parent, int index) {
        super.onRender(parent, index);

        RpcProxy> proxy = new RpcProxy>() {

            @Override
            public void load(Object loadConfig, final AsyncCallback> callback) {
                //modification here - look that callback is overriden not passed through!!
                service.getBeanPosts((PagingLoadConfig) loadConfig, new AsyncCallback>() {

                    public void onFailure(Throwable caught) {
                        callback.onFailure(caught);
                    }

                    public void onSuccess(PagingLoadResult result) {
                        callback.onSuccess(result);
                        //here you are reloading store
                        grid.getStore().getLoader().load();
                    }
                });
            }
        };

        // loader  
        final BasePagingLoader> loader = new BasePagingLoader>(proxy, new BeanModelReader());

        ListStore store = new ListStore(loader);
        List columns = new ArrayList();
        //...  
        ColumnModel cm = new ColumnModel(columns);

        grid = new Grid(store, cm);
        add(grid);

    }
} 

答案 1 :(得分:1)

要将新数据显示到网格,您真的需要重新加载网格吗? 您可以使用新数据创建新的模型对象,并将其添加到ListStore。

假设您有一个扩展BaseModel的CommentModel和一个CommentStore为CommentStore的ListStore。

final ListStore<Commentmodel> commentStore = new ListStore<Commentmodel>();

//now call a rpc to load all available comments and add this to the commentStore.
commentService.getAllComment(new AsyncCallback<List<Commentmodel>>() {

   @Override
   public void onFailure(Throwable caught) {
    lbError.setText("data loading failure");

   }

   @Override
   public void onSuccess(List<Commentmodel> result) {
    commentStore.add(result);

   }
  }); 

commentServiceAsyncService

现在,如果用户发表评论,只需使用新数据创建新的CommentModel对象

CommentModel newData = new CommentModel('user name', 'message','date');

并将其添加到commentStore。

commentStore.add(newData);

希望这能为你服务。

但如果您确实需要重新加载整组数据,请再次调用该服务。在onSuccess方法中,首先清除commentStore,然后添加结果。请记住,第一种方法更耗时。