2016-07-06 24 views
0

Ich verwende GWT 2.4 Version. So deaktivieren Sie die Zeilenauswahl in GWT DatagridSo deaktivieren Sie bestimmte Zeilen Auswahl mit GWT Datagrid 2.4

In meinem Grid habe ich gemischte Datensätze, aber basierend auf der Bedingung muss ich die Zeilenauswahl in DataGrid deaktivieren.

Beispiel: Ich habe 2 Zeilen mit folgenden Werten

EMP Name | EMP ID | Status

ABC | 1001 | Aktiv

ABC | 1001 | In Aktiv

Wenn der Benutzer auf die zweite Zeile klickt, sollte es nicht ausgewählt werden.

Wie dies zu erreichen ist. Bitte lassen Sie es mich wissen.

Antwort

1

Ich konnte dies mit default checkbox selection event manager erreichen.

Standardmäßig hätten Sie eine CheckboxCell, die Zeilenauswahl behandeln würde. Der Trick ist, dass Sie die render() Methode der CheckboxCell überschreiben und das Kontrollkästchen nicht rendern können, wenn die entsprechende Zeile nicht ausgewählt werden kann, indem einfach super.render() Methode aufgerufen wird.

Unten ist ein vollständiger Arbeitscode für Ihr Beispiel. Sie können keine Zeilen auswählen, die nicht aktiv sind. Bitte beachten Sie die Parameter des Konstruktors new CheckboxCell(true, false) - das ist wichtig.

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

Ich musste nur eine eindeutige Zeilenkennung als Auswahl-ID hinzufügen.

Nach jeder Änderung der Auswahl sehen Sie eine Warnung mit einer Liste ausgewählter Zeilen-IDs.

enter image description here