Вложенная сетка в GWT

Мне нужно разработать элемент управления, который похож на Nested Grid в Smart GWT.

У пользователя будет столбец для расширенных изображений, когда пользователь нажимает на изображение в определенной строке, там должна быть открыта подсетка. Здесь все остальные ряды должны двигаться вниз.

Как я могу достичь этой функциональности? Кто-нибудь может дать мне несколько подсказок, чтобы я мог продолжить.

У меня уже есть сетка, которая представляет собой ячейку с настраиваемым заголовком (с реализованной функцией поиска).

Спасибо, Сарита.

1 ответ

Создайте свой вложенный виджет (myNestedWidget), который вы хотите показать. Он должен иметь стиль CSS "position: absolute", если только ваша сетка не добавлена ​​в LayoutPanel (или аналогичную), и в этом случае вы можете разместить свой виджет напрямую. Давайте назовем родительский виджет вашей сетки gridParentWidget.

В вашем CellTable добавьте следующий обработчик:

myTable.addCellPreviewHandler(new Handler<myObject>() {
    @Override
    public void onCellPreview(CellPreviewEvent<myObject> event) {
        if ("click".equals(event.getNativeEvent().getType())) {
            if (event.getColumn() == 0) {
                int top = myTable.getRowElement(event.getIndex()).getAbsoluteBottom();
                int left = myTable.getRowElement(event.getIndex()).getAbsoluteLeft();
                myNestedWidget.getElement().getStyle().setTop(top, Unit.PX);
                myNestedWidget.getElement().getStyle().setLeft(left, Unit.PX);
                gridParentWidget.add(myNestedWidget);

                Scheduler.get().scheduleDeferred(new ScheduledCommand() {
                    @Override
                    public void execute() {
                        int height = myNestedWidget.getOffsetHeight();
                        myTable.getRowElement(event.getIndex()).getStyle().setHeight(height + "px");
                    ]
                });
            }
        }
    });
}

Это, очевидно, план решения. Детали реализации могут незначительно отличаться в зависимости от того, какие виджеты вы используете для своего родительского виджета и своего вложенного виджета. Если вы где-то меняете z-индексы, вы должны это учитывать. Вы также должны убедиться, что ваш вложенный виджет вписывается в ширину вашей сетки, или вам нужно будет обернуть его в ScrollPanel и установить ширину для него явно.

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