2016-06-13 9 views
1

私はMultiSelectionModelでGWT DataGridを使用しています。GWT DataGrid:CheckboxCell選択と標準ラインモードの同時選択の使用

グリッドの項目の選択が

Bによって同時にCheckboxCell

、さらに有する

A)CheckboxColumnによって達成されなければならない)標準ラインモード選択モデル(残りの行をクリックしてください)。

CheckboxColumnを使用すると、ユーザーは異なるエントリを複数選択できるようにする必要があります。しかし、データグリッド線のどこかをクリックすると、1行選択ポリシーが実行されます。つまり、チェックボックスを使用する前に複数選択が行われた場合、この選択はリセットされ、クリックされた行のみその後選択する。

これは私が持っているものです。誰もCheckBoxモードとライン選択モードを同時に有効にする方法を知っていますか?

public class JobDataGrid extends DataGrid<Job> 
{ 
    private MultiSelectionModel<Job> selectionModel; 

    private Column<Job, Boolean> checkboxColumn; 
    private TextColumn<Job> idColumn; 
    private TextColumn<Job> titleColumn; 
    private TextColumn<Job> timestampColumn; 
    private TexTColumn<Job> ... 

    public JobDataGrid() 
    { 
     super(); 

     checkboxColumn = new Column<Job, Boolean> (new CheckboxCell (true, false)) { 
      @Override 
      public Boolean getValue (Job job) 
      { 
       // Get the value from the selection model. 
       return selectionModel.isSelected (job); 
      } 
     }; 
     checkboxColumn.setFieldUpdater (new FieldUpdater<Job, Boolean>() { 
      public void update (int index, Job job, Boolean value) 
      { 
       // Called when the user clicks on a checkbox. 
       selectionModel.setSelected (job, value); 
      } 
     }); 

     // [...] 
     // [...] 
     // [...] 

     selectionModel = new MultiSelectionModel<Job>(); 
     setSelectionModel (selectionModel); 
     // setKeyboardSelectionPolicy (KeyboardSelectionPolicy.DISABLED); 

     // [...] 
     // [...] 
     // [...] 
    } 
} 

私はすべての4つの亜種

new CheckboxCell (false, false); 
new CheckboxCell (true, false); 
new CheckboxCell (false, true); 
new CheckboxCell (true, true); 

を試してみましたが、それらのどれも私が必要なものまで見られませんでした。たぶん

createCustomManager(DefaultSelectionEventManager.EventTranslator<T> translator) 

が役立つだろうと私はまた

setSelectionModel (selectionModel, DefaultSelectionEventManager.<Job> createCheckboxManager()); 

でプレイしましたか?

ありがとう トーマス

答えて

3

独自の「チェックボックスマネージャ」を作成し、そこにやりたいことができます。

table.setSelectionModel(selectModel, DefaultSelectionEventManager.<DocumentListItemDTO> createCustomManager(
      new DefaultSelectionEventManager.CheckboxEventTranslator<DocumentListItemDTO>() { 
       @Override 
       public SelectAction translateSelectionEvent(CellPreviewEvent<DocumentListItemDTO> event) { 
        SelectAction action = super.translateSelectionEvent(event); 
        if (action.equals(SelectAction.IGNORE)) { 

         if (!event.getNativeEvent().getCtrlKey() && !event.getNativeEvent().getShiftKey()) 
          selectionModel.clear(); 

         return SelectAction.TOGGLE; 

        } 
        return action; 
       } 
      })); 
+0

OKおかげで、どのようにcheckboxCellクリック用フィルタに-eventsとline-click-eventsはそこにありますか? –

1

Lista's answerが正しい方向を示しました!要求されるようにウェブ上だけではほとんどここで、例を見つけることができたためDefaultSelectionEventManager.CheckboxEventTranslatorの使用方法を示すために

が完全に機能するソリューションです:

setSelectionModel (selectionModel, DefaultSelectionEventManager.<Job> createCustomManager (
     new DefaultSelectionEventManager.CheckboxEventTranslator<Job>() { 

      @Override 
      public SelectAction translateSelectionEvent (CellPreviewEvent<Job> event) 
      { 
       NativeEvent nativeEvent = event.getNativeEvent(); 

       // Determine if we clicked on a checkbox. 
       Element target = nativeEvent.getEventTarget().cast(); 
       if ("input".equals (target.getTagName().toLowerCase (Locale.ROOT))) 
       { 
        final InputElement input = target.cast(); 
        if ("checkbox".equals (input.getType().toLowerCase (Locale.ROOT))) 
        { 
         // Synchronize the checkbox with the current selection state. 
         input.setChecked (event.getDisplay().getSelectionModel().isSelected (
           event.getValue())); 
         return SelectAction.TOGGLE; 
        } 
       } 
       else 
       { 
        if (BrowserEvents.CLICK.equals (nativeEvent.getType())) 
        { 
         selectionModel.clear(); 
         return SelectAction.SELECT; 
        } 
       } 
       return SelectAction.IGNORE; 
      } 
     })); 
関連する問題