2016-07-06 12 views
0

Я использую версию GWT 2.4. Как отключить выбор строк в GWT Datagrid.Как отключить выбор некоторых строк с помощью GWT Datagrid 2.4

В моей гриде у меня смешанные записи, но на основании условия мне нужно отключить выбор строки в DataGrid.

Для примера: у меня есть 2 строки с ниже значения

EMP Имя | Идентификатор EMP | Статус

ABC | 1001 | Active

ABC | 1001 | В активном

Когда пользователь нажимает на вторую строку, его не следует выбирать.

Как достичь этого. Пожалуйста, дайте мне знать.

ответ

1

Я смог достичь этого с помощью default checkbox selection event manager.

По умолчанию у вас будет CheckboxCell, который будет обрабатывать выбор строки. Хитрость заключается в том, что вы можете переопределить метод render()CheckboxCell и не показывать этот флажок, если соответствующая строка не разрешена для выбора, просто не вызывая метод super.render().

Ниже приведен полный рабочий код для вашего примера. Вы не можете выбирать строки, которые неактивны. Пожалуйста, обратите внимание на параметры конструктора new CheckboxCell(true, false) - это важно.

public Widget test() { 
    DataGrid<DatagridType> grid = new DataGrid<DatagridType>(); 

    final MultiSelectionModel<DatagridType> selectionModel = new MultiSelectionModel<DatagridType>(new ProvidesKey<DatagridType>() { 
     @Override 
     public Integer getKey(DatagridType item) { 
      return item.getRowId(); 
     } 
    }); 
    grid.setSelectionModel(selectionModel, DefaultSelectionEventManager.<DatagridType> createCheckboxManager()); 

    selectionModel.addSelectionChangeHandler(new Handler() { 
     @Override 
     public void onSelectionChange(SelectionChangeEvent event) { 
      Window.alert(selectionModel.getSelectedSet().toString()); 
     } 
    }); 

    grid.addColumn(new Column<DatagridType, Boolean>(new CheckboxCell(true, false)) { 
     @Override 
     public Boolean getValue(DatagridType object) { 
      return selectionModel.isSelected(object); 
     } 

     @Override 
     public void render(Context context, DatagridType object, SafeHtmlBuilder sb) { 
      if(object.isActive()) 
       super.render(context, object, sb); 
     } 
    }, "Select"); 

    TextColumn<DatagridType> nameColumn = new TextColumn<DatagridType>() { 
     @Override 
     public String getValue(DatagridType object) { 
      return object.getEmpName(); 
     } 
    }; 

    TextColumn<DatagridType> idColumn = new TextColumn<DatagridType>() { 
     @Override 
     public String getValue(DatagridType object) { 
      return Integer.toString(object.getEmpId()); 
     } 
    }; 

    TextColumn<DatagridType> statusColumn = new TextColumn<DatagridType>() { 
     @Override 
     public String getValue(DatagridType object) { 
      return object.isActive() ? "Active" : "In Acticve"; 
     } 
    }; 

    grid.addColumn(nameColumn, "EMP Name"); 
    grid.addColumn(idColumn, "EMP ID"); 
    grid.addColumn(statusColumn, "Status"); 

    List<DatagridType> values = new ArrayList<DatagridType>(); 
    values.add(new DatagridType(0, "ABC", 1001, true)); 
    values.add(new DatagridType(1, "ABC", 1001, false)); 
    values.add(new DatagridType(2, "AAA", 1002, true)); 
    values.add(new DatagridType(3, "AAA", 1002, false)); 
    values.add(new DatagridType(4, "BBB", 1003, true)); 
    values.add(new DatagridType(5, "BBB", 1003, false)); 

    grid.setRowData(values); 

    grid.setHeight("500px"); 

    Window.alert("Done"); 

    return grid; 
} 

private class DatagridType { 
    private int rowId; 
    private String empName; 
    private int empId; 
    private boolean active; 

    public DatagridType(int rowId, String empName, int empId, boolean active) { 
     this.rowId = rowId; 
     this.empName = empName; 
     this.empId = empId; 
     this.active = active; 
    } 

    public int getRowId() { 
     return rowId; 
    } 

    public String getEmpName() { 
     return empName; 
    } 

    public int getEmpId() { 
     return empId; 
    } 

    public boolean isActive() { 
     return active; 
    } 

    @Override 
    public String toString() { 
     return Integer.toString(rowId); 
    } 
} 

Мне просто нужно было добавить уникальный идентификатор строки в качестве идентификатора выбора.

После каждого изменения выбора вы увидите предупреждение со списком выбранных идентификаторов строк.

enter image description here