GWT Datagrid не показывает данные, но содержит их

Я пытаюсь преобразовать cellTable в datagrid, потому что я хочу добавить обработчик поиска позже, и для этого мне нужны фиксированные заголовки столбцов. На данный момент я расширяю класс cellTable/datagrid и помещаю виджет в simplelayoutpanel и добавляем его к моему tabpanel.

Если я использую cellTable, все работает нормально, и данные появляются. Если я изменил тип класса на datagrid, данные иногда показывают вверх (имена столбцов всегда есть). Чтобы добавить что-то в таблицу, я использовал setRowData или dataProvider. Если я устанавливаю точки останова для задержки загрузки содержимого таблицы, таблица иногда содержит данные. Если позже я вызову метод перерисовывания для таблицы, таблица отобразит правильную информацию. Но таблица должна автоматически загружать содержимое. В других "позициях" моего проекта я также использовал datagrid, и он работал в Dialogboxes.

Я думаю, что с рисунком элементов должна быть ошибка, потому что если я вызову .getRowCount в таблице или устаревшем .getDisplayedItems, он вернет мне правильное количество элементов, которые должны быть в таблице. Кроме того, если я добавлю модель выбора в таблицу и выберите элемент, элемент содержит достоверные данные.

Ответ 1

DataGrid необходимо поместить в LayoutPanel или Panel, который реализует интерфейс ProvidesResize, чтобы быть видимым. ScrollPanel реализует этот интерфейс.

Кроме того, эта цепочка LayoutPanels от вашего DataGrid до вашего корневого элемента/панели должна быть непрерывной. Это похоже на иерархию вашей панели.

Наконец, вы должны использовать RootLayoutPanel вместо RootPanel, чтобы добавить LayoutPanels. Итак, вы убедились, что добавили свой SimpleLayoutPanel в RootLayoutPanel?

Также см. это GWT: DataGrid - установить высоту 100%, не отображая должным образом

Ответ 2

Вот мои 2 цента.

Когда дело доходит до визуализации DataGrid за пределами правильно сформированной "LayoutPanel или Panel, которая реализует древовидную структуру ProvidesResize", я обнаружил, что мне всегда нужно помнить следующее:

  • Как объясняет этот вопрос, для свойства DataGrid для высоты требуется явное значение, например, "123px". Без этого DataGrid не показывает свои строки данных (даже если они находятся в DOM).

  • Если поставить DataGrid на вкладку несфокусированный DecoratedTabPanel, DataGrid.redraw() необходимо вызвать, когда табуляция будет сосредоточена. Опять же, без этого DataGrid не показывает свои строки данных (даже если они находятся в DOM).

Надеюсь, это поможет.