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).
Надеюсь, это поможет.
Ответ 3
В моем случае это было вызвано этим:
Строки DataGrid не отображаются во второй вкладке TabLayoutPanel