2012-07-06 63 views
1

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

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

感谢

问候

+1

你在'StackLayoutPanel'上试过'forceLayout'吗? – 2012-07-06 22:57:11

+0

你是我的上帝!你救了我。非常感谢。你有最重要的一点!!! – Joey 2012-07-08 04:04:02

+0

您是否尝试在组件上调用onResize? http://pgt.de/2012/07/07/celltabledatagrid-wrapped-by-tablayoutpanel-non-active-tab-table-not-filled/ – 2012-07-07 14:57:18

回答

1

我一直在挣扎,这件事几乎3天。感谢Papick G. Taboada和Thomas Broyer。 你们的想法真的很有帮助。 Bascially您的解决方案无法解决问题。但是在我将两种解决方案结合起来之后,dang〜它就起作用了!

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

我希望这能帮助谁都有同样的问题其他人使用GWT 2.5RC

0

我碰到这个问题来了与内DataGrid和面板,这是在之前StackPanelLayout。 DataGrid实现了RequiresResize,所以我让包含DataGrid的Panel实现了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并将其传递。