我尝试使用DataGrid并将其放在stacklayoutpanel中。当我为ListDataProvider提供数据时,CellTable在浏览器中不可见,因为它位于非活动选项卡上(尽管它在DOM树中可见) )。切换到包含CellTable的选项卡后,其中没有数据。如果选项卡在数据配置时处于活动状态,则表格将正确填充。由于我已将列排序,如果单击排序,数据将正确显示。我希望在单击其他初始选项卡时自动显示数据。如果我切换到使用celltable,这不会是问题。
我知道这是GWT中的错误,它在GWT 2.5 RC中修复。但我的老板不希望我使用GWT2.5RC。我必须解决这个问题。我知道有人说datagrid.redraw()可以修复它。我累了,但显示器很奇怪。例如,我在DataGrid中有10行,在选择第二个选项卡后,调用了redraw(),数据会自动显示,但只有10px的块显示数据和滚动条。我必须向下滚动才能看到其他行。标签底部有很多空间没有使用。谁能告诉我如何解决这个问题?那么我用错误的方法来解决它吗? 还有什么我可以做的来解决这个问题。 请问有人给我一些提示吗?
由于
最好的问候
答案 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并将其传递。