我可以使用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();
}
答案 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以获得更有说服力的解释和示例代码。