关于使用StackLayoutPanel包装的DataGrid的错误

时间:2012-07-06 22:39:08

标签: gwt datagrid redraw gwt-tablayoutpanel layoutpanels

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

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

由于

最好的问候

2 个答案:

答案 0 :(得分:1)

我已经在这件事上挣扎了将近3天。感谢Papick G. Taboada和Thomas Broyer。 你们的想法真的很有帮助。基本上,您的任一解决方案都无法解决问题。但在我将两种解决方案结合起来后,dang~就可以了!!。

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

我希望在使用GWT 2.5RC之前,这可以帮助其他有相同问题的人

答案 1 :(得分:0)

我在StackPanelLayout中的DataGrid和Panel中遇到了这个问题。 DataGrid实现了RequiresResize,因此我使Panel包含了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并将其传递。