4

我可以使用 celltablebuilder 构建自定义行。单击特定的锚单元格时,我可以为该行构建额外的子行。这个子行有按钮,当点击按钮时我做了一些动作。我可以在子行中添加带有 clickhandler 的按钮,但是当单击按钮时没有发生任何事情,clickhandler 没有触发。

任何人都可以帮忙。

protected void buildRowImpl(GridDTO rowValue, int absRowIndex ) {
  buildRows(rowValue, absRowIndex, true);
  if (showingFriends.contains(rowValue.getComponentId())) {
     buildAdditonalRows( absRowIndex, gridDTO);
  }

}
private void buildAdditonalRows(int index, GridDTO rowValue, ){ 
     TableRowBuilder row = startRow();
     td = row.startTD();
     if(rowValue.getXpath() != null){
    //td.text(rowValue.getXpath());
    renderCell(td, createContext(1), cellTable.getColumn(1), rowValue);
 }else{
    td.text("");
 }
     td.endTD();
     td = row.startTD();
     Button button = new Button ();
 button.setText("Save");
 button.addClickHandler(new ClickHandler() {
 @Override
 public void onClick(ClickEvent event) {
     Window.alert("ssss");
     }
 });
 DivBuilder div = td.startDiv();
 div.html(new afeHtmlBuilder().appendHtmlConstant(button.toString()).toSafeHtml());
 div.end();
     td.endTD();
     row.endTR();
}
4

2 回答 2

1

CellPreviewEvent 提供子索引。您可以使用它来获取子行值。示例用法:

dataGrid.addCellPreviewHandler(new CellPreviewEvent.Handler<TreeItem>() {
    @Override
    public void onCellPreview(final CellPreviewEvent<TreeItem> event) {
        if(event.getNativeEvent().getType().equals(BrowserEvents.CLICK)){
             if(event.getContext().getSubIndex()>0){
                    event.getValue().getChild(event.getContext().getSubIndex()-1);
             }
        }
    }
});

或者您可以使用 selectionMode 提供自定义 CellPreviewEvent.Handler 实现。有关更多详细信息,您可以查看AbstractHasData

于 2015-01-16T11:52:50.927 回答
0

我有类似的情况,我需要一个单元格内的小部件来监听点击事件......我发现一旦你将小部件插入到单元格中,它就不会响应事件(换句话说,只有实际的构成小部件的 HTML 被放入单元格中,不包括任何类型的事件处理)。解决方法是将事件添加到单元格(您可以为该特定单元格小部件创建自定义单元格类并覆盖 OnBrowserEvent 以侦听事件。)

请参阅GWT:关于将自定义小部件添加到自定义小部件的 celltable 丢失事件以获得更雄辩的解释和示例代码。

于 2012-09-28T10:48:45.757 回答