【问题标题】:Deleting the grid from a panel and adding a new grid in gwt从面板中删除网格并在 gwt 中添加新网格
【发布时间】:2014-02-13 07:40:07
【问题描述】:

我正在研究 gwt,当我单击一个按钮时,应该删除面板中的现有网格并添加一个新网格。有人可以帮我解决这个问题。下面是我单击刷新按钮时执行的代码。我正在编辑现有网格并更新数据库中的一些细节。因此,当我单击此刷新按钮时,我再次进行新的 rpc 调用并在更新网格后获取新数据,我需要在现有网格本身中显示新数据。

            RpcProxy< String> proxy_refresh = new RpcProxy< String>() {
                 protected void load(Object loadConfig, AsyncCallback<String> callback) {
                     if (itemService == null) {
                         itemService = GWT.create(ReleaseItemService.class);
                     }
                     itemService.search(criteria, callback);
                 }
             };


             xml.setRoot("resultset");
             xml.setRecordName("record");
             xml.addField("release_id");
             xml.addField("project_name");
             xml.addField("type");
             xml.addField("business_unit");
             xml.addField("project_manager");
             xml.addField("developer");
             xml.addField("deployer");
             xml.addField("verifier");
             xml.addField("status");
             xml.addField("item_no");
             xml.addField("qa_developer");
             xml.addField("deployment_date");

             XmlReader reader_refresh = new XmlReader(xml);
             BaseListLoader loader_refresh = new BaseListLoader(proxy_refresh, reader_refresh);
             loader_refresh.addLoadListener(new LoadListener() {
                 public void loaderLoadException(LoadEvent le) {
                     super.loaderLoadException(le);
                     MessageBox.alert("Error", le.exception.getMessage(), null);
                 }
             });        



             columns = new ArrayList<ColumnConfig>(6);


             columns.add(new ColumnConfig("release_id", "Release ID", 70));
             columns.add(new ColumnConfig("item_no", "Item No", 70));
             columns.add(new ColumnConfig("deployment_date", "Deployment Date", 150));        
             columns.add(new ColumnConfig("business_unit", "Business Unit", 100));
             columns.add(new ColumnConfig("type", "Type", 120));
             columns.add(new ColumnConfig("project_name", "Project Name", 120));
             columns.add(new ColumnConfig("status", "Status", 100));
             columns.add(new ColumnConfig("developer", "Devloper", 100));
             columns.add(new ColumnConfig("qa_deployer", "QA Deployer", 125));


             store_refresh = new ListStore<BaseModelData>(loader_refresh);
             ColumnModel columnModel1 = new ColumnModel(columns);

              System.out.println("removing grid from panel");
              grid.removeFromParent();

              if(flag==true){
                  System.out.println("Removing grid1");
                  grid1.removeFromParent();
              }

             // grid1.removeFromParent();
             System.out.println("Creating new grid");

             grid1 = new EditorGrid(store_refresh, columnModel1);

             grid1.setBorders(true);
             grid1.setAutoHeight(true);
             grid1.setLoadMask(true);
             grid1.setStripeRows(true);
             grid1.getView().setEmptyText("No data found for the given criteria");
             System.out.println("Adding grid1 to panel");
             loader_refresh.load();
             grid1.getStore().getLoader().load();
             panel.add(grid1);

             panel.getLayout().layout();

             //submit.hide();
             loader_refresh.load();

            flag = true;
             System.out.println("Loader refresh "+loader_refresh.load()+" store refresh is "+store_refresh.getCount());



             proxy_refresh = null;
             store_refresh = null;
             loader_refresh = null;
             reader_refresh = null;
             System.out.println("Loader refresh "+loader_refresh+" store refresh is "+store_refresh+"proxy_refresh "+proxy_refresh+"reader_refresh "+reader_refresh);

我能够删除旧网格,但是当将新网格添加到面板时,它没有显示新数据。

下面是图片

![在此处输入图片描述][1]

提前致谢。

【问题讨论】:

    标签: java gwt gxt


    【解决方案1】:

    我假设您正在使用 GXT。 ContentPanel、FitLayout、EditorGrid 是 Sencha GXT 附带的类,我认为是 2.x 版。检查您是否有以“com.extjs”开头的导入。

    您的布局链有问题。您是否在其中一个父面板中使用 FlowLayout?

    您是否尝试过调用 forceLayout() 或

    panel.getLayout().layout();
    

    添加新网格后?

    【讨论】:

    • 嗨 Hoss,我在我的应用程序中使用 gwt,并且没有像 forceLayout 这样的网格或面板方法。我已尝试删除所有删除并将网格添加到面板,但它不起作用。
    • 嗨 Hoss 我能够在面板中获得新的网格。谢谢你的帮助。现在我有一个问题。我正在单击刷新按钮以重新加载新的网格数据并在其中进行 rpc 调用。因此,当我单击刷新按钮时,应该进行 rpc 调用并获取新数据。但是因为它是一个 Rpc 代理,所以当我第一次单击刷新按钮时,我得到了被感染的数据。我尝试将代理设为 null 并检查 rpc 是否正在获取新数据,但是当第一次在刷新按钮内调用 rpc 时我正在获取旧数据。你能帮忙吗?
    • 你试过了吗:grid1.getStore().getLoader().load();
    • 嗨,Hoss,我试过了,但它不起作用。我在刷新按钮代码的末尾将 proxt 设为 null,但是当我单击刷新按钮时,它仍在从代理加载旧数据。
    • 你必须在Grid之后定义你的RpcProxy,因为你必须使用语句grid1.getStore().getLoader().load();在 AsyncCallBack 的 onSuccess 方法中。然后它应该工作。看这里:stackoverflow.com/questions/4943393/…
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多