GWT中的动态DataGrid

时间:2016-02-25 20:03:35

标签: gwt datagrid callback resultset

我正在尝试在GWT中构建一个DataGrid,它将显示从rpc方法中获取的任意数据集。

我从一个方法获取字段,从另一个方法获取数据,但我已经取得了一些进展。 我已经设法构造Datagrid并添加rpc.getFields()方法中的列,并使用AsyncDataProvider填充表。 问题是,当我刷新浏览器时,它会复制Datagrid中的所有列。我无法弄清楚该怎么做。我试图先删除所有列,但没有运气。

如果有人有想法,我会附上代码。

public class MyCallBack implements AsyncCallback<List<Field>> {

DataGrid<Record> dg;



public MyCallBack(DataGrid<Record> dgrid) { 
    this.dg=dgrid;

}

public void onFailure(Throwable caught) {
    Window.alert(caught.getMessage());
}

public void onSuccess(List<Field> result) { 
    for (int i=0;i<=result.size();i++) {            
        IndexedColumn ic = new IndexedColumn(i);
        dg.addColumn(ic, result.get(i).getLabel());         
    }           
}

public AsyncCallback<List<Field>> getCb() {
    return this;
}
public void onModuleLoad() {

    final DataGrid<Record> dg = new DataGrid<Record>();     

    MyCallBack mcb = new MyCallBack(dg);
    DataProvider dp = new DataProvider();

    DBConnectionAsync rpcService = (DBConnectionAsync) GWT.create(DBConnection.class);
    ServiceDefTarget target = (ServiceDefTarget) rpcService;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "MySQLConnection";
    target.setServiceEntryPoint(moduleRelativeURL);

    rpcService.getFields(mcb.getCb()); 

    dp.addDataDisplay(dg);      
    dg.setVisibleRange(0, 200);
    SplitLayoutPanel slp = new SplitLayoutPanel();
    slp.setHeight("700px");
    slp.setWidth("1500px");
    slp.addWest(dg, 770);

    RootPanel.get().add(slp);         
  } 

2 个答案:

答案 0 :(得分:1)

刷新浏览器时,所有UI都将丢失。 (a)首次显示UI或(b)在浏览器刷新后显示UI之间没有区别。

你的评论&#34;只有当我重新启动tomcat时它才能正常运行&#34;表明问题出在服务器端。最有可能的是,您在第二次调用时返回两倍的数据点。

答案 1 :(得分:0)

尝试清理表格,然后填写表格:

public void onSuccess(List<Field> result) { 
    clearTable();

    for (int i=0;i<=result.size();i++) {            
        IndexedColumn ic = new IndexedColumn(i);
        dg.addColumn(ic, result.get(i).getLabel());         
    }           
}

private void clearTable(){
    while (dg.getColumnCount() > 0) {
        db.removeColumn(0);
    }
}