GWT DataGrid行选择

时间:2013-10-21 15:14:44

标签: java gwt datagrid

我有一个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实现了一个按钮单元格。这有效,但它并不理想。

有什么建议吗?

2 个答案:

答案 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
            }
        }
    });