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

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

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

Спасибо

С уважением

2 ответа

Решение

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

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

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

Я столкнулся с этой проблемой с помощью DataGrid и Panel, которая была в StackPanelLayout. DataGrid реализует RequResize, поэтому я создал Panel, которая содержала DataGrid, реализует RequResize, чтобы он мог вызывать 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, который содержит виджет, который реализует RequResize, должен также реализовать RequResize и передать его дальше.

Другие вопросы по тегам