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