1

我有一个带有多选模型和复选框的 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 实现了一个按钮单元。这可行,但并不理想。

有什么建议么?

4

2 回答 2

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()
于 2013-10-21T16:28:44.087 回答
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
            }
        }
    });
于 2017-02-02T14:40:36.640 回答