【问题标题】:Why can't I use GWT Button in a CellTable and how to combine cell buttons with cell text为什么我不能在 CellTable 中使用 GWT 按钮以及如何将单元格按钮与单元格文本结合使用
【发布时间】:2015-01-23 10:40:45
【问题描述】:

我想在 CellTable 中放置一些文本和几个按钮。我可以显示文本和按钮,但是当我点击一个按钮时,什么也没有发生。

final SafeHtmlCell detailsCell = new SafeHtmlCell();
    Column<UIRow, SafeHtml> detailsColumn = new Column<UIRow, SafeHtml>(
            detailsCell) {
        @Override
        public SafeHtml getValue(UIRow object) {
            String details = "some informations xxx <br/>";

            Button addButton = new Button("Add value", new ClickHandler() {
                public void onClick(ClickEvent event) {
                  Window.alert("hello");
                }
            });
            details += addButton;

    SafeHtmlBuilder sb = new SafeHtmlBuilder();
            sb.appendHtmlConstant(details);

            return sb.toSafeHtml();
        }
    };
    detailsColumn.setCellStyleNames(CSS_DETAILS_TD);
    table.setColumnWidth(detailsColumn, "10%");
table.addColumn(detailsColumn, new SafeHtmlHeader(SafeHtmlUtils.fromSafeConstant("details")));

但是,如果我在每个单元格中放置一个按钮,它就可以工作,调用 onClick 方法:

        final ButtonCell btnCell = new ButtonCell() {
            @Override
            public void render(
                    final Context context,
                    final SafeHtml data,
                    final SafeHtmlBuilder sb) {
                sb.appendHtmlConstant("<button type=\"button\" style=\"height: 25px\" title=\"submit\" class=\"btn btn-success btn-small\" tabindex=\"-1\">");
                if (data != null) {
                    sb.append(data);
                }
                sb.appendHtmlConstant("</button>");
            }
        };

        Column<UIRow, String> btnColumn = new Column<UIRow, String>(btnCell) {
            @Override
            public String getValue(UIRow object) {
                return "";
            }
        };
        btnColumn.setCellStyleNames("td-actions");
        table.addColumn(btnColumn, "");
        table.setColumnWidth(btnColumn, "5%");

        btnColumn.setFieldUpdater(new FieldUpdater<UIRow, String>() {
            public void update(int index, UIRow object, String value) {

               ...

                service.submit(object, false, new AsyncCallback<String>() {

                    @Override
                    public void onFailure(Throwable caught) {
                        Window.alert(caught.getMessage());
                    }

                    @Override
                    public void onSuccess(String result) {
                        Window.alert(result);
                    }

                });

            }
        });
    }

我想在一个 Col/Cell 中显示 Html 文本和按钮,可以吗?

谢谢

【问题讨论】:

    标签: gwt datagrid onclick cell col


    【解决方案1】:

    Cell 小部件(CellTable、DataGrid 等)并非旨在嵌入常规 GWT 小部件,例如 Button。

    对于按钮,您可以使用ButtonCell

    看一下官方例子: http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwCellSampler

    更新:

    至于第二部分关于如何组合单元格的问题,有几个选择:

    • 查看CompositeCell,您可以在其中组合多个单元格(例如ButtonCell 和TextCell)。

    • 另一种选择是使用自定义CellTableBuilder,您可以在其中自定义表格渲染的所有方面,如列跨度、列/行装饰等

    【讨论】:

    • 如果我想让我的按钮正常工作,我已经使用了 ButtonCell,但我需要的是同一单元格/列中的文本和多个按钮。
    • 您有几个选择:查看 CompositeCell,您可以在其中组合多个单元格(例如 ButtonCell 和 TextCell)。另一种选择是使用自定义 CellTableBuilder,您可以在其中自定义表格渲染的所有方面,如 colspan、列/行装饰等
    • 谢谢 yurgis,我会看一下并通知您。
    • 它与 CellComposite 一起工作,谢谢:-)。
    • 好的,我改进了我的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多