1

我尝试使用 DataGrid 并将其放在 stacklayoutpanel 中。当我为 ListDataProvider 提供数据时,CellTable 在浏览器中不可见,因为它位于非活动选项卡上(尽管它在 DOM 树中可见)。切换到包含 CellTable 的选项卡后,其中没有数据。如果选项卡在提供数据时处于活动状态,则表格已正确填写。由于我已使列可排序,因此如果单击排序,数据将正确显示。我希望在单击另一个原生选项卡时自动显示数据。如果我切换到使用 celltable,这将不是问题。

我知道这是 GWT 中的错误,它已在 GWT 2.5 RC 中修复。但是我的老板还不想让我使用 GWT2.5RC。我必须解决这个问题。我知道有人说 datagrid.redraw() 可以修复它。我累了,但显示很奇怪。例如,我在DataGrid中有10行,选择第二个选项卡后,调用redraw(),自动显示数据,但只有10px的块显示数据和滚动条。我必须向下滚动才能看到其他行。选项卡底部有很多空间未使用。谁能告诉我如何解决这个问题?那么我是否使用了错误的方法来修复它?我还能做些什么来解决这个问题。谁能给我一些提示。

谢谢

最好的祝福

4

2 回答 2

1

我已经为这件事苦苦挣扎了将近 3 天。感谢 Papick G. Taboada 和 Thomas Broyer。你们的想法真的很有帮助。基本上,您的任何一个解决方案都不能解决问题。但是在我结合了这两种解决方案之后,dang~它起作用了!!。

所以。完整的解决方案是,在非活动选项卡上添加选择处理程序,然后在调用事件时,使用 datagrid.onResize() 和 stackLayoutPanel.forcelayout()。这可以解决我的问题。我也尝试用 datagrid.redraw() 替换 datagrid.onResize()。它也有效。

我希望这可以帮助其他在使用 GWT 2.5RC 之前遇到同样问题的人

于 2012-07-08T04:25:25.540 回答
0

我在 StackPanelLayout 中的 DataGrid 和 Panel 中遇到了这个问题。DataGrid 实现了 RequiresResize,所以我让包含 DataGrid 的面板实现了 RequiresResize,这样它就可以为 DataGrid 调用 onResize()。

在包含 DataGrid 的面板中

@Override
public void onResize()
{
    dataGrid.onResize();
}

在 StackLayoutPanel 上

    stackLayoutPanel.addSelectionHandler(new SelectionHandler<Integer>() {

        // http://code.google.com/p/google-web-toolkit/issues/detail?id=6889
        @Override
        public void onSelection(SelectionEvent<Integer> event) {
            Integer selectedItem = event.getSelectedItem();
            StackLayoutPanel panel = (StackLayoutPanel) event.getSource();
            Widget  selectedWidget = panel.getWidget(selectedItem);
            if (selectedWidget != null && selectedWidget instanceof RequiresResize)
            {
                ((RequiresResize)selectedWidget).onResize();
            }
        }
    });

我相信更一般的答案是 StackLayoutPanel 中包含实现 RequiresResize 的小部件的任何容器也应该实现 RequiresResize 并将其传递。

于 2013-12-30T07:27:21.813 回答