如何将单击处理程序添加到单元格表构建器的子行

时间:2012-09-26 06:40:29

标签: gwt-celltable gwt-2.5

我可以使用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();
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

请参阅GWT: On adding custom widget to celltable losing events of the custom widgets以获得更有说服力的解释和示例代码。