ошибки, связанные с использованием DataGrid, обернутых StackLayoutPanel

Я попытался использовать DataGrid и поместить его в stacklayoutpanel. В то время, когда я предоставляю данные для ListDataProvider, CellTable не отображается в браузере, потому что он находится на неактивной вкладке (хотя он виден в дереве DOM). После перехода на вкладку, содержащую CellTable, в ней нет данных. Если вкладка активна во время предоставления данных, таблица заполняется корректно. Поскольку я сделал столбец сортируемым, если я нажму на сортировку, данные будут отображаться правильно. Я хочу, чтобы данные отображались автоматически, когда я нажимаю другую вкладку. Это не будет проблемой, если я перейду на использование таблицы ячеек.

Я знал, что это ошибка в GWT, и она исправлена ​​в GWT 2.5 RC. Но мой босс пока не хочет, чтобы я использовал GWT2.5RC. Мне нужно обходное решение, чтобы исправить это. Я знал, что кто-то сказал, что datagrid.redraw() может это исправить. Я устал, но дисплей странный. Например, у меня есть 10 строк в DataGrid, после выбора 2-й вкладки вызывается redraw(), данные автоматически отображаются, но есть только около 10 пикселей блока, отображающего данные и полосу прокрутки. Мне нужно прокрутить вниз, чтобы увидеть другие строки. В нижней части вкладки много места, которое не используется. Может ли кто-нибудь сказать мне, как это исправить? Так я использовал неправильный способ исправить это? есть ли что-нибудь еще, что я могу сделать, чтобы решить эту проблему. Может ли кто-нибудь дать мне несколько советов, пожалуйста.

Спасибо

Наилучшие пожелания


person Joey    schedule 06.07.2012    source источник
comment
Вы пробовали forceLayout на StackLayoutPanel?   -  person Thomas Broyer    schedule 07.07.2012
comment
Вы пытались вызвать onResize для компонента? pgt.de /2012/07/07/   -  person Papick G. Taboada    schedule 07.07.2012
comment
ты мой бог! вы спасли меня. Спасибо. Вы поняли самое главное!!!   -  person Joey    schedule 08.07.2012


Ответы (2)


Я боролся с этой штукой почти 3 дня. Спасибо за Папика Г. Табоаду и Томаса Бройера. Ваши идеи, ребята, действительно полезны. По сути, ни одно из ваших решений не решает проблему. но после того, как я объединил оба решения, черт возьми, это сработало!

Так. завершенное решение заключается в том, что добавьте обработчик выбора на неактивную вкладку, затем, когда событие вызывается, используется datagrid.onResize(), а затем stackLayoutPanel.forcelayout(). Это может решить мою проблему. Я также попытался заменить datagrid.onResize() на datagrid.redraw(). Это также работает.

Я надеюсь, что это может помочь другим людям, у которых возникла такая же проблема, прежде чем использовать GWT 2.5RC.

person Joey    schedule 08.07.2012

Я столкнулся с этой проблемой с DataGrid внутри и панелью, которая находилась в StackPanelLayout. DataGrid реализует RequiresResize, поэтому я сделал панель, содержащую DataGrid, реализующую RequiresResize, чтобы она могла вызывать onResize() для DataGrid.

в панели, которая содержала 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 и передать его дальше.

person user2133007    schedule 30.12.2013