【问题标题】:GWT - update table in panelGWT - 更新面板中的表格
【发布时间】:2013-03-20 08:24:36
【问题描述】:

我有一个带有表格的verticalPanel。 OnModuleLoad 我从数据库中获取数据,这些数据显示在表格中。单击按钮时,我想将列表框中的新数据添加到它。它工作正常,但我不知道如何更新表格/面板。我现在做的是创建一个新表来显示数据,但我不能删除第一个表。我是否必须将表格附加到面板才能将其删除?其实我不喜欢这个解决方案,这就是为什么我想知道是否有更新方法之类的。

创建表格

public void createTimeTable(){
        //Table and Panel -> created globally
        //On Load -> get all times which are already booked
        serviceImplURL.getRpcDB().getBookedTimes(username, new AsyncCallback<ArrayList<Times>>() {
            /**
            */
            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }
            /**
            */
            @Override
            public void onSuccess(ArrayList<Times> startList) {
                /**
                */

                    table.setRowCount(startList.size(), true);
                    table.setRowData(0, startList);


                    // Add column to show the start time.
                      TextColumn<Times> startColumn 
                      = new TextColumn<Times>() {
                         @Override
                         public String getValue(Times times) {
                            return Double.toString(times.getStart());
                         }
                      };
                      table.addColumn(startColumn, "Beginn");

                   // Add column to show the pause time.
                      TextColumn<Times> pauseColumn 
                      = new TextColumn<Times>() {
                         @Override
                         public String getValue(Times times) {
                            return Integer.toString(times.getPause());
                         }
                      };
                      table.addColumn(pauseColumn, "Pause in Minuten");

                   // Add column to show the end time.
                      TextColumn<Times> endColumn 
                      = new TextColumn<Times>() {
                         @Override
                         public String getValue(Times times) {
                            return Double.toString(times.getEnd());
                         }
                      };
                      table.addColumn(endColumn, "Ende");



                      //table panel
                      panel.setBorderWidth(1);      
                      panel.setWidth("400");
                      panel.add(table);
                      panel.getElement().setId("mainTable");


                      // Add the widgets to the root panel.
                      RootPanel.get().add(panel);

            }               
        });

【问题讨论】:

    标签: java database gwt panel celltable


    【解决方案1】:

    首先您必须更正您的代码。您只需要设置数据。正确的?因此无需一次又一次地创建表 column 来更改其中的数据。

    首先在 rpc 调用方法之外创建表结构。然后使用表的实例并在其中设置数据。

    你只需要更新数据列表,使用类似的方法

    table.setRowCount(startList.size(), true);
    table.setRowData(0, startList); 
    

    编辑:

       private void initilaize()
        {
    
                    // Add column to show the start time.
                      TextColumn<Times> startColumn 
                      = new TextColumn<Times>() {
                         @Override
                         public String getValue(Times times) {
                            return Double.toString(times.getStart());
                         }
                      };
                      table.addColumn(startColumn, "Beginn");
    
                   // Add column to show the pause time.
                      TextColumn<Times> pauseColumn 
                      = new TextColumn<Times>() {
                         @Override
                         public String getValue(Times times) {
                            return Integer.toString(times.getPause());
                         }
                      };
                      table.addColumn(pauseColumn, "Pause in Minuten");
    
                   // Add column to show the end time.
                      TextColumn<Times> endColumn 
                      = new TextColumn<Times>() {
                         @Override
                         public String getValue(Times times) {
                            return Double.toString(times.getEnd());
                         }
                      };
                      table.addColumn(endColumn, "Ende");
    
    
    
                      //table panel
                      panel.setBorderWidth(1);      
                      panel.setWidth("400");
                      panel.add(table);
                      panel.getElement().setId("mainTable");
    
    
                      // Add the widgets to the root panel.
                      RootPanel.get().add(panel);
         }
    
        public void createTimeTable(){
                //Table and Panel -> created globally
                //On Load -> get all times which are already booked
                serviceImplURL.getRpcDB().getBookedTimes(username, 
    new AsyncCallback<ArrayList<Times>>() {
                    /**
                    */
                    @Override
                    public void onFailure(Throwable caught) {
                        // TODO Auto-generated method stub
    
                    }
                    /**
                    */
                    @Override
                    public void onSuccess(ArrayList<Times> startList) {
                        /**
                        */
                            table.setRowCount(startList.size(), true);
                            table.setRowData(0, startList);
    
                    }               
                });
    

    【讨论】:

    • 这个创建表方法只使用一次来获取时间......然后我有一个更新方法,当我单击一个按钮时会调用它。目前我在更新方法中调用 createTimeTable 方法。但通常我只想更新表而不是再次创建它。
    • 像以前一样从数据库接收数据一样更新表,因为数据可能被删除或添加但未编辑。当我单击按钮时,我想在表格中显示我插入 DB 的数据。
    • 请参阅我编辑 我的答案。做这样的事情。初始化列 & 和表一次调用此方法一次。
    • 嗯,我看不出有什么不同。如果我在开始时创建它们后调用它们。但是如何在不刷新页面的情况下刷新按钮单击时的表格?
    • @kArvee 您是否尝试过 takrbuiam 的解决方案?我认为第一个问题是:为什么每次收到服务器响应时都要创建列?尝试将您的列创建移动到创建表的方法中,并且只执行一次该方法(不是每次请求数据时)。如果您打算在服务器每次响应后创建列,您可以尝试在创建列后执行table.setRowData()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多