How to make cell as non editable based on another cell value in Editable Grid in gxt

后端 未结 3 1725
不知归路
不知归路 2020-12-21 05:54

Hi I am creating Editable Grid using GXT 2.2.3. I created columns like below:

   List eventList=new ArrayList();
    eventList.ad         


        
3条回答
  •  [愿得一人]
    2020-12-21 06:44

    Add an afterEdit Listener to grid.

     private EditorGrid grid;
     private ListStore gridStore;
     private ColumnModel cm;
     public void onModuleLoad() {
    
     ContentPanel cp = new ContentPanel();
     cp.setSize(500, 500);
    
    
    
    
     List configs = new ArrayList();  
    
    
    List eventList=new ArrayList();
    eventList.add("Mark/Modify Attendance");
    eventList.add("Remove Attendance");
    eventList.add("Modify Roster");
    eventList.add("Mark OD");
    eventList.add("Forgot To Checkin");
    
    final SimpleComboBox eventcombo = new SimpleComboBox(); 
    eventcombo.setEmptyText("");
    eventcombo.setTriggerAction(TriggerAction.ALL);
    //  EventCombo.setSelection(eventList);
     CellEditor eventComboEditor = new CellEditor(eventcombo) {  
        public Object preProcessValue(Object value) {  
          if (value == null) {  
            return value;  
          }  
          return eventcombo.findModel(value.toString());  
        }  
      public Object postProcessValue(Object value) {  
           if (value == null) {  
             return value;  
           }  
         return ((ModelData) value).get("value");  
       }  
     };  
     eventcombo.setForceSelection(true);  
     eventcombo.setEmptyText("");
     eventcombo.setTriggerAction(TriggerAction.ALL); 
     eventcombo.add(eventList);
    
    ColumnConfig column = new ColumnConfig();  
    column.setId("event");  
    column.setHeaderHtml("Co Manager/Distributor");  
    column.setEditor(eventComboEditor);  
    column.setWidth(200);
    configs.add(column);  
    
    ColumnConfig column2 = new ColumnConfig();  
    column2.setId("test");  
    column2.setHeaderHtml("Test");  
    column2.setEditor(new CellEditor(new TextField()));
    column2.setWidth(100);
    configs.add(column2);  
    
    ColumnConfig column3 = new ColumnConfig("desk", "Desk", 105);  
    column3.setEditor(new CellEditor(new TextField()));
    configs.add(column3);
    
    cm = new ColumnModel(configs);
    gridStore = new ListStore();
    ModelData md = new BaseModelData();
    md.set("event", "Modify Roster");
    md.set("test","A1");
    md.set("desk", "A2");
    gridStore.add(md);
    
    md = new BaseModelData();
    md.set("test","B1");
    md.set("event", "Remove Attendance");
    md.set("desk", "B2");
    gridStore.add(md);
    
    md = new BaseModelData();
    md.set("test","C1");
    md.set("desk", "C2");
    md.set("event", "Mark OD");
    gridStore.add(md);
    
    gridStore.commitChanges();
    
    grid = new EditorGrid(gridStore, cm);
    grid.setBorders(true);
    grid.setStripeRows(true);
    grid.setTrackMouseOver(true);
    grid.disableTextSelection(false);
    grid.setHideHeaders(false);
    grid.setHeight(500);
    grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    
    grid.addListener(Events.AfterEdit, gridAfterEditListener);
    
    
    
    Viewport viewport = new Viewport();
    viewport.setLayout(new FlowLayout());
    
    cp.add(grid);
    viewport.add(cp ,new FitData(new Margins(0,0,56,0)));
    RootPanel.get("content").add(viewport);
    
    
    }
    
    
    Listener> gridAfterEditListener = new Listener>() {
      @Override
        public void handleEvent(GridEvent be) {
    
         ModelData data = be.getModel();
         String val = data.get("event");
        if(val.equalsIgnoreCase("Remove Attendance")){
              data.set("test","new test");
              grid.getColumnModel().getColumnById("desk").getEditor().disable();
              grid.getStore().update(data); 
              grid.getView().refresh(true);
        }   
       else{
    
            data.set("test","old test");
            grid.getColumnModel().getColumnById("desk").getEditor().enable();
            grid.getStore().update(data); 
            grid.getView().refresh(true);
    
         }
     }
    };
    

    The complete code

提交回复
热议问题