2014-03-24 188 views
3

您好我正在使用GXT 2.2.3创建可编辑网格。我创建的列象下面这样:如何使单元格不可编辑基于gxt中可编辑网格中的另一个单元格值

List<String> eventList=new ArrayList<String>(); 
    eventList.add("Mark/Modify Attendance"); 
    eventList.add("Remove Attendance"); 
    eventList.add("Modify Roster"); 
    eventList.add("Mark OD"); 
    eventList.add("Forgot To Checkin"); 

eventcombo = new SimpleComboBox<String>(); 
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 eventcolumn = new ColumnConfig(); 
    eventcolumn.setId("event"); 
    eventcolumn.setHeader("Event"); 
    eventcolumn.setWidth(145); 
    eventcolumn.setMenuDisabled(true); 
    eventcolumn.setSortable(false); 
    /* */ 
// column.setEditor(new); 
    eventcolumn.setEditor(eventComboEditor); 


    configs.add(eventcolumn); 

    //rosterInOut-10 
     ColumnConfig rosterInOutcolumn = new ColumnConfig(); 
     rosterInOutcolumn.setId("rosterInOut"); 
     rosterInOutcolumn.setHeader("Old Roster"); 
     rosterInOutcolumn.setWidth(70); 
     rosterInOutcolumn.setMenuDisabled(true); 
     rosterInOutcolumn.setSortable(false); 
    configs.add(rosterInOutcolumn); 


    Rostercombo = new SimpleComboBox<String>(); 
     CellEditor editor1 = new CellEditor(Rostercombo) { 
       public Object preProcessValue(Object value) { 
        if (value == null) { 
        return value; 
        } 
        return Rostercombo.findModel(value.toString()); 
       } 
       public Object postProcessValue(Object value) { 
        if (value == null) { 
        return value; 
        } 
       return ((ModelData) value).get("value"); 
       } 
      }; 
      Rostercombo.setForceSelection(true); 
      Rostercombo.setTriggerAction(TriggerAction.ALL); 
      Rostercombo.add("OD"); 
      Rostercombo.add("O"); 

    //newRosterin-11 
    ColumnConfig newRosterincolumn = new ColumnConfig(); 
    newRosterincolumn.setId("newRosterin"); 
    newRosterincolumn.setHeader("New Roster In"); 
    newRosterincolumn.setWidth(80); 
    newRosterincolumn.setEditor(editor1); 
    newRosterincolumn.setMenuDisabled(true); 
    newRosterincolumn.setSortable(false); 
    configs.add(newRosterincolumn); 

    //checkinout-12 
    ColumnConfig checkinoutcolumn = new ColumnConfig(); 
    checkinoutcolumn.setId("checkinout"); 
    checkinoutcolumn.setHeader("Check In-Out"); 
    checkinoutcolumn.setWidth(80); 
    checkinoutcolumn.setMenuDisabled(true); 
    checkinoutcolumn.setSortable(false); 
    configs.add(checkinoutcolumn); 

    //checkinDate-13 
    ColumnConfig checkinDatecolumn = new ColumnConfig(); 
    checkinDatecolumn.setId("checkinDate"); 
    checkinDatecolumn.setHeader("Check In Date"); 
    checkinDatecolumn.setWidth(85); 
    checkinDatecolumn.setMenuDisabled(true); 
    checkinDatecolumn.setSortable(false); 

    final DateField dateField1 = new DateField(); 
    dateField1.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MMM/yyyy")); 
    dateField1.getDatePicker().addListener(Events.Select, new Listener<DatePickerEvent>() { 

     @Override 
     public void handleEvent(DatePickerEvent dpe) { 

     // Window.alert("Getting Roster Date here-->"+grid.getColumnModel().); 
     Window.alert("Getting RosterDate--."+ caseStoreModule.getModifiedRecords().get(0).get("rosterDate")); 



     } 
    }); 

    checkinDatecolumn.setEditor(new CellEditor(dateField1)); 
    checkinDatecolumn.setDateTimeFormat(DateTimeFormat.getFormat("dd/MMM/yyyy")); 
    configs.add(checkinDatecolumn); 

    //checkinTime-14 
    ColumnConfig checkinTimecolumn=new ColumnConfig(); 
    checkinTimecolumn.setId("checkinTime"); 
    checkinTimecolumn.setHeader("Check In Time"); 
    checkinTimecolumn.setWidth(80); 
    checkinTimecolumn.setMenuDisabled(true); 
    checkinTimecolumn.setSortable(false); 
    final TextField<String> checkintime = new TextField<String>(); 
    checkintime.setAllowBlank(true); 
    checkintime.addListener(Events.Change, new Listener<BaseEvent>() { 

     @Override 
     public void handleEvent(BaseEvent be) { 

     // Window.alert("getting the checkin time value-->"+checkintime.getValue()); 
      String variable = checkintime.getRawValue(); 
      if(variable != null & !variable.equalsIgnoreCase("")) 
      { 
       if(!variable.matches(REG_EXP)) 
       { 
        checkintime.clear(); 
        MsgBox.info("Enter time in hh:mm format"); 
        checkintime.focus(); 

        return; 
       } 
      } 
     } 
    }); 


    checkinTimecolumn.setEditor(new CellEditor(checkintime)); 

    configs.add(checkinTimecolumn); 



    //checkoutDate-15 
    ColumnConfig checkoutDatecolumn=new ColumnConfig(); 
    checkoutDatecolumn.setId("checkoutDate"); 
    checkoutDatecolumn.setHeader("Check Out Date"); 
    checkoutDatecolumn.setWidth(90); 
    checkoutDatecolumn.setMenuDisabled(true); 
    checkoutDatecolumn.setSortable(false); 
    DateField dateField2 = new DateField(); 
    dateField2.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MMM/yyyy")); 
    checkoutDatecolumn.setEditor(new CellEditor(dateField2)); 
    checkoutDatecolumn.setDateTimeFormat(DateTimeFormat.getFormat("dd/MMM/yyyy")); 
    configs.add(checkoutDatecolumn); 

    //checkoutTime-15 
    ColumnConfig checkoutTimecolumn=new ColumnConfig(); 
    checkoutTimecolumn.setId("checkoutTime"); 
    checkoutTimecolumn.setHeader("Check Out Time"); 
    checkoutTimecolumn.setWidth(90); 
    checkoutTimecolumn.setMenuDisabled(true); 
    checkoutTimecolumn.setSortable(false); 
    final TextField<String> checkouttime = new TextField<String>(); 
    checkouttime.setAllowBlank(true); 
    checkouttime.addListener(Events.Change, new Listener<BaseEvent>() { 

     @Override 
     public void handleEvent(BaseEvent be) { 

     // Window.alert("getting the checkouttime value-->"+checkouttime.getValue()); 
      String variable = checkouttime.getRawValue(); 
      if(variable != null & !variable.equalsIgnoreCase("")) 
      { 
       if(!variable.matches(REG_EXP)) 
       { 
        checkouttime.clear(); 
        MsgBox.info("Enter time in hh:mm format"); 
        checkouttime.focus(); 

        return; 
       } 
      } 
     } 
    }); 
    checkoutTimecolumn.setEditor(new CellEditor(checkouttime)); 
    configs.add(checkoutTimecolumn); 

    //for gradeCode-16 
    ColumnConfig gradeCodecolumn=new ColumnConfig(); 
    gradeCodecolumn.setId("gradeCode"); 
    gradeCodecolumn.setHidden(true); 
    configs.add(gradeCodecolumn); 

    //for rosterevent-17 
ColumnConfig rostereventcolumn=new ColumnConfig(); 
rostereventcolumn.setId("rosterevent"); 
rostereventcolumn.setHidden(true); 
    configs.add(rostereventcolumn); 

    //for action-18 
    ColumnConfig actioncolumn=new ColumnConfig(); 
    actioncolumn.setId("action"); 
    actioncolumn.setHeader("Action"); 
    //column.setHidden(true); 
    actioncolumn.setWidth(70); 
    actioncolumn.setMenuDisabled(true); 
    actioncolumn.setSortable(false); 
    configs.add(actioncolumn); 

    //for actionHidden-19 
    ColumnConfig actionHiddencolumn=new ColumnConfig(); 
    actionHiddencolumn.setId("actionHidden"); 
    actionHiddencolumn.setHidden(true); 
    configs.add(actionHiddencolumn); 

    //for attendId-20 
    ColumnConfig attendIdcolumn=new ColumnConfig(); 
    attendIdcolumn.setId("attendId"); 
    attendIdcolumn.setHidden(true); 
    configs.add(attendIdcolumn); 

    //for rosterChanged-21 
    ColumnConfig rosterChangedcolumn=new ColumnConfig(); 
    rosterChangedcolumn.setId("rosterChanged"); 
    rosterChangedcolumn.setHidden(true); 
    configs.add(rosterChangedcolumn); 

    // for holiday-22 
    ColumnConfig holidaycolumn=new ColumnConfig(); 
    holidaycolumn.setId("holiday"); 
    holidaycolumn.setHidden(true); 
    configs.add(holidaycolumn); 

    // for checkinDateTimeHidden-23 
    column=new ColumnConfig(); 
    column.setId("checkinDateTimeHidden"); 
    column.setHidden(true); 
    configs.add(column); 

    // for checkoutDateTimeHidden-24 
    ColumnConfig checkoutDateTimeHiddencolumn=new ColumnConfig(); 
    checkoutDateTimeHiddencolumn.setId("checkoutDateTimeHidden"); 
    checkoutDateTimeHiddencolumn.setHidden(true); 
    configs.add(checkoutDateTimeHiddencolumn); 

    // for loginEmpEntity-25 
    ColumnConfig loginEmpEntitycolumn=new ColumnConfig(); 
    loginEmpEntitycolumn.setId("loginEmpEntity"); 
    loginEmpEntitycolumn.setHidden(true); 
    configs.add(loginEmpEntitycolumn); 

    // for halfDayLLimit-26 
    ColumnConfig halfDayLLimitcolumn=new ColumnConfig(); 
    halfDayLLimitcolumn.setId("halfDayLLimit"); 
    halfDayLLimitcolumn.setHidden(true); 
    configs.add(halfDayLLimitcolumn); 



    return new ColumnModel(configs); 

现在,我想使checkinDate,CheckIntime,CheckOutDate和CheckOutTime列细胞作为不可编辑或禁用基于eventCombo箱价值的价值。

如何在eventCombo box的Listener中做到这一点。请建议。

我是GXT新手。

UPDATE

我想下面的代码禁用和启用细胞,但它禁止细胞fine.But停用后,如果我选择另一种则不会再次启用。

监听> gridAfterEditListener =新的监听器>(){

@Override 
    public void handleEvent(GridEvent<AttendanceCaseCreationModel> be) { 
     AttendanceCaseCreationModel data = be.getModel(); 
     String val = data.get("event"); 

     if(val.equalsIgnoreCase("Remove Attendance")){ 

      data.set("checkinDate",""); 


       grid.getColumnModel().getColumnById("checkinDate").getEditor().disable(); 
       grid.getStore().update(data); 
       grid.getView().refresh(true); 


     } 
     else { 
      data.set("checkinDate",""); 
      grid.getColumnModel().getColumnById("checkinDate").getEditor().enable(); 
     grid.getStore().update(data); 
      grid.getView().refresh(true); 

     } 

    } 
}; 
grid.addListener(Events.AfterEdit, gridAfterEditListener); 

请建议如何解决此

+0

任何在GXT有丰富经验的人请提出解决方案其紧急 – user1903120

+0

尽管如此,我还是没有得到解决方案。请任何人都可以找到解决方案。 – user1903120

回答

3

而是想禁用和启用细胞的,我只是隐藏和使用CSS显示单元。下面是我的代码,它使我无法达到这个要求。

GridCellRenderer<AttendanceCaseCreationModel> checkinRenderer=new GridCellRenderer<AttendanceCaseCreationModel>() { 

     @Override 
     public Object render(AttendanceCaseCreationModel model, String property, 
       ColumnData config, int rowIndex, int colIndex, 
       ListStore<AttendanceCaseCreationModel> store, 
       Grid<AttendanceCaseCreationModel> grid) { 

      String color="pink"; 
      if(eventcombo.getValue()!=null){ 


       if(eventcombo.getRawValue().equalsIgnoreCase("Forgot To Checkin") || 
         eventcombo.getRawValue().equalsIgnoreCase("Mark/Modify Attendance")){ 
        color="pink"; 
       } 
       else{ 

        config.style=config.style+ ";visibility: hidden;"; 
       } 

      } 

      config.style=config.style+ ";background-color:" + color + ";"; 
      config.style=config.style+ ";display: block;"; 
      Object value = model.get(property); 
      return value; 

     } 
    }; 
1

添加afterEdit监听到电网。

private EditorGrid<ModelData> grid; 
private ListStore<ModelData> gridStore; 
private ColumnModel cm; 
public void onModuleLoad() { 

ContentPanel cp = new ContentPanel(); 
cp.setSize(500, 500); 




List<ColumnConfig> configs = new ArrayList<ColumnConfig>(); 


List<String> eventList=new ArrayList<String>(); 
eventList.add("Mark/Modify Attendance"); 
eventList.add("Remove Attendance"); 
eventList.add("Modify Roster"); 
eventList.add("Mark OD"); 
eventList.add("Forgot To Checkin"); 

final SimpleComboBox<String> eventcombo = new SimpleComboBox<String>(); 
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<String>())); 
column2.setWidth(100); 
configs.add(column2); 

ColumnConfig column3 = new ColumnConfig("desk", "Desk", 105); 
column3.setEditor(new CellEditor(new TextField<String>())); 
configs.add(column3); 

cm = new ColumnModel(configs); 
gridStore = new ListStore<ModelData>(); 
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<ModelData>(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<GridEvent<ModelData>> gridAfterEditListener = new Listener<GridEvent<ModelData>>() { 
    @Override 
    public void handleEvent(GridEvent<ModelData> 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); 

    } 
} 
}; 

完整的代码

+0

您必须根据您的条件获取“日期”,并且“id”将是您希望启用或禁用的列的ID –

+0

对于您的其他问题(http://stackoverflow.com/questions/22524914/how- to-add-listener-to-cell-in-gxt-editable-grid)添加验证器正在工作。如果验证失败,文本字段在网格中被清除 –

+0

我必须禁用该特定行的单元格。假设我选择了“删除出勤”,那么我需要禁用该分区行的Checkindate,checkintime,checkouttime和checkoutDate单元格。我正在使用GXT 2的编辑器网格2 – Gundamaiah

3

如何使细胞基于在GXT在编辑网格中的另一个单元格的值不可编辑。

尝试用BeforeEdit听众并根据您的条件致电​​以禁用编辑。

没有必要禁用/启用单元格。只要根据条件停止在当前单元格中编辑

示例代码:

grid.addListener(Events.BeforeEdit, new Listener<GridEvent<ModelData>>() { 
     public void handleEvent(GridEvent<ModelData> be) { 

      // disable 2nd cell based on value of 1st cell 
      ModelData data = be.getModel(); 
      String val = data.get("event"); // read 1st cell value 
      if (val.equalsIgnoreCase("Remove Attendance")) { 
       if (be.getColIndex() == 2) { // disable 2nd cell only 
        be.setCancelled(true);// Disable edition 
       } 
      } 
     } 
    }); 

请看看complete sample code

相关问题