【问题标题】:Unable to get GWT ListDataProvider to work with DataGrid无法让 GWT ListDataProvider 与 DataGrid 一起使用
【发布时间】:2015-04-07 19:45:00
【问题描述】:

我将数据保存在 FlexTable 中,但我正在迁移到 DataGrid,以便轻松添加分页。我通过 REST 调用获取数据。我似乎无法让数据实际显示。以下是相关的sn-ps:

    private DataGrid<SearchResult> resultsGrid = new DataGrid<SearchResult>();
    resultsGrid.setAutoHeaderRefreshDisabled(true);

        TextColumn<SearchResult> titleColumn = new TextColumn<SearchResult>() {
            @Override
            public String getValue(SearchResult object) {
                return object.getTitle();
            }
        };
        resultsGrid.addColumn(titleColumn, "Document Title");

        ButtonCell buttonCell = new ButtonCell();
        Column<SearchResult, String> buttonColumn = new Column<SearchResult, String>(buttonCell){
            @Override
            public String getValue(SearchResult object) {
                return "Show";
            }
        };

        resultsGrid.addColumn(buttonColumn, "");
        buttonColumn.setFieldUpdater(new FieldUpdater<SearchResult, String>() {
            public void update(int index, SearchResult object, String value) {
                doPreview(object.title);
            }
        });

        TextColumn<SearchResult> roleColumn = new TextColumn<SearchResult>() {
            @Override
            public String getValue(SearchResult object) {
                return object.getRoles();
            }
            @Override
            public String getCellStyleNames(Context context, SearchResult object) {
                if (object.containsCurrentRole)
                    return "highlight";
                else
                    return null;
            }
        };

        resultsGrid.addColumn(roleColumn, "Associated Roles");

        final SingleSelectionModel<SearchResult> selectionModel = new SingleSelectionModel<SearchResult>();
        resultsGrid.setSelectionModel(selectionModel);
        selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            public void onSelectionChange(SelectionChangeEvent event) {
              SearchResult selected = selectionModel.getSelectedObject();
              if (selected != null) {
                  clearWordCloud();
                  getWordCloud(selected.getTitle());
              }
            }
          });

        dataProvider.addDataDisplay(resultsGrid);

        // Create a Pager to control the table.
        SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
        pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
        pager.setDisplay(resultsGrid);
        resultsGrid.setVisible(true);
        resultsGrid.addStyleName("results");
        mainPanel.add(resultsGrid);

...

搜索后调用的函数:

 private void updateTable(List<SearchResult> results) {

          dataProvider.getList().addAll(results);
          dataProvider.refresh();
          dataProvider.flush();
          resultsGrid.setVisible(true);
          resultsFlexTable.setVisible(true);
      }

起初我错过了刷新和刷新,但添加它们没有效果。我有点难过。

【问题讨论】:

    标签: gwt datagrid dataprovider


    【解决方案1】:

    最可能的问题是您的 DataGrid 的高度为零。 DataGrid 实现 RequiresResize,这意味着它的高度要么必须明确设置,要么如果父小部件实现 ProvidesResize,它将从父小部件获取其高度。 FlexTable 没有实现 ProvidesResize 接口。

    注意:您不需要 flushrefresh - 将数据添加到 DataProvider 会刷新网格。

    【讨论】:

    • 谢谢,成功了。令人失望的是文档没有提到如此重要的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2013-04-09
    • 1970-01-01
    • 2013-09-24
    • 2014-10-31
    • 2018-01-02
    • 2016-11-14
    相关资源
    最近更新 更多