2012-07-06 46 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並將其傳遞。