Удаление сетки с панели и добавление новой сетки в gwt

Я работаю над 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]

Заранее спасибо.


person Harsha GNS    schedule 13.02.2014    source источник


Ответы (1)


Я предполагаю, что вы используете GXT. ContentPanel, FitLayout, EditorGrid — это классы, которые поставляются с Sencha GXT, я думаю, версии 2.x. Проверьте, есть ли у вас импорт, начинающийся с «com.extjs».

У вас проблема с цепочкой макетов. Используете ли вы FlowLayout в одной из родительских панелей?

Вы пытались вызвать forceLayout() или

panel.getLayout().layout();

после добавления новой сетки?

person El Hoss    schedule 13.02.2014
comment
Привет, Хосс, я использую gwt в своем приложении, и нет такого метода, как forceLayout для сетки или панели. Я попытался удалить все удалить и добавить сетку на панель, но это не работает. - person Harsha GNS; 13.02.2014
comment
Привет, Хосс, я смог получить новую сетку на панели. Спасибо за вашу помощь. Теперь у меня возникла проблема. Я нажимаю кнопку обновления, чтобы перезагрузить новые данные сетки и сделать в этом вызов rpc. Поэтому, когда я когда-либо нажимаю кнопку «Обновить», должен быть выполнен вызов rpc, который должен получить новые данные. Но поскольку это прокси-сервер Rpc, я получаю данные, которые исправляются, когда я впервые нажимаю кнопку обновления. Я попытался сделать прокси нулевым и проверил, получает ли rpc новые данные, но я получаю старые данные, когда rpc вызывается в первый раз внутри кнопки обновления. Вы можете помочь? - person Harsha GNS; 13.02.2014
comment
Вы пробовали: grid1.getStore().getLoader().load(); - person El Hoss; 13.02.2014
comment
Привет, Хосс, я пробовал это, но это не сработало. Я сделал proxt нулевым в конце кода кнопки обновления, но все же, когда я нажимаю кнопку обновления, он загружает старые данные из прокси. - person Harsha GNS; 13.02.2014
comment
Вы должны определить свой RpcProxy после Grid, потому что вы должны использовать оператор grid1.getStore().getLoader().load(); внутри вашего метода onSuccess вашего AsyncCallBack. Тогда это должно работать. Посмотрите здесь: stackoverflow.com/questions/4943393/ - person El Hoss; 13.02.2014
comment
Привет, Хосс, спасибо за помощь. Я смог решить это с помощью ваших материалов :). Большое спасибо - person Harsha GNS; 13.02.2014