我有一个GWT DataGrid,带有多选模型和复选框,用于显示选择/选择/取消选择行。这一切都很好。
但是,我还想拥有第二个独立的选择模型。如果用户双击一行,我想处理该事件,并让事件处理程序知道双击了哪一行。双击不应影响复选框选择。
我试过了:
final SelectionModel<MyRecord> selectionModel = new MultiSelectionModel...
//Yes I need a MultiSelectionModel
dataGrid.addDomHandler(new DoubleClickHandler() {
public void onDoubleClick(DoubleClickEvent event) {
selectionModel.get??? //no suitable getter for double-clicked
}
}, DoubleClickEvent.getType());
但是当我发现现在在事件处理程序中获得双击行时,遇到了死胡同。一种方法是注册多选和单选模型,但怀疑DataGrid会支持它。
我也无法弄清楚如何从DoubleClickEvent对象获取点击的行。
我已经使用FieldUpdater实现了一个按钮单元格。这有效,但它并不理想。
有什么建议吗?
答案 0 :(得分:2)
如果我理解正确,你想获得该行的索引。
你可以这样做:(这样你就会获得“真实”指数)
AbstractSelectionModel<T> selectionModel = (AbstractSelectionModel<T>)dataGrid.getSelectionModel();
ArrayList<Integer> intList = new ArrayList<Integer>();
List<Row> list = (List<Row>)_dataProvider.getList();
int i = 0;
for(Row row : list)
{
if( selectionModel.isSelected(row) )
intList.add(i);
i++;
}
<强>更新强>
要获得当前行,您可以这样做:
datagrid.getKeyboardSelectedRow()
答案 1 :(得分:0)
我在派对上已经晚了3年,但我认为更正确的解决方案是:
dataGrid.addCellPreviewHandler(new CellPreviewEvent.Handler<YOUR_MODEL_TYPE>() {
@Override
public void onCellPreview(final CellPreviewEvent<YOUR_MODEL_TYPE> event) {
if (BrowserEvents.DBLCLICK.equalsIgnoreCase(event.getNativeEvent().getType())) {
int row = event.getIndex();
doStuff(row); // do whatever you need the row index for
}
}
});