2013-10-21 100 views
1

我有一個多選模型的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

如果我理解正確,您想獲取該行的索引。

你可以做這樣的:(這樣你會得到「真實」的指數)

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++; 
} 

UPDATE:

,僅保留當前行,你可以這樣做:

datagrid.getKeyboardSelectedRow() 
+0

這裏的麻煩是我將在MultiSelectionModel中選中所有行,而不是雙擊它的單個行。 – NickJ

+0

好吧,我錯過了,請看我更新的答案 – Spiff

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