2014-03-24 3 views
0

GXT 3.0 그리드 용 GridInlineEditing 객체가 있습니다. 모든 것이 예상대로 작동합니다. 사용자 편집 이벤트를 캡처하고이 이벤트의 행, 열 및 모델/변경 레코드를 찾을 수 있습니다.GXT 3 onCompleteEdit 이벤트 처리 중에 같은 행의 다른 필드에 액세스하는 방법

내가 알아 내지 못한 것은 그 행의 다른 컨트롤에 가장 잘 액세스하는 방법입니다.

은 특히,이 열 모델이 있습니다

private void initializeColumnModel() { 

    // Create the configurations for each column in the grid 
    List<ColumnConfig<Reminder, ?>> ccs = new LinkedList<ColumnConfig<Reminder, ?>>(); 
    typeColumnConfig  = new ColumnConfig<Reminder,String>( properties.name(),   120, "Type"  ); 
    completedColumnConfig = getDateCellColumn(     properties.completed_(), 200, "Completed"); 
    dueColumnConfig   = getDateCellColumn(     properties.due_(),   200, "Due"  ); 
    applicableColumnConfig = new ColumnConfig<Reminder,Boolean>( properties.applicable(), 140, "Applicable"); 

    // Add column configurations to ColumnModel. 
    ccs.add(typeColumnConfig); 
    ccs.add(completedColumnConfig); 
    ccs.add(dueColumnConfig); 
    ccs.add(applicableColumnConfig); 
    applicableColumnConfig.setAlignment(HasHorizontalAlignment.ALIGN_CENTER); 
    typeColumnConfig.setAlignment(HasHorizontalAlignment.ALIGN_CENTER); 
    reminderColumnModel = new ColumnModel<Reminder>(ccs); 
} 

을하고 '완료 날짜의 가치에 대한 변경을 차단하려고 시도하고 다음 프로그래밍'기한 '제어 (년의 고정 번호를 추가 운영 마치 사용자가 방금 한 것처럼). 여기

내가 이벤트를 캡처하는 방법은 다음과 같습니다

@Override 
public Widget asWidget() { 
    if(!gridInitialized){ 
     editing = new GridInlineEditing<Reminder>(grid); 

     DateField dueDateField   = getDateField(); 
     DateField completedDateField = getDateField(); 

     editing.addEditor(dueColumnConfig,   dueDateField); 
     editing.addEditor(completedColumnConfig, completedDateField); 
     editing.addEditor(applicableColumnConfig, new CheckBox()); 

     editing.addCompleteEditHandler(new CompleteEditHandler<Reminder>(){ 
      @Override 
      public void onCompleteEdit(CompleteEditEvent<Reminder> event) { 
       GridCell cell = event.getEditCell(); 
       int row = cell.getRow(); 
       int col = cell.getCol(); 
       Reminder rem = reminderStore.get(row); 
       Store<Reminder>.Record rec = reminderStore.getRecord(rem); 
       //System.out.println("row:"+row+", col:"+col+", applic:"+rem.getApplicable()); 
       //System.out.println("rec:"+rec.toString()); 
       Change<Reminder, Boolean> applicChange = rec.getChange(properties.applicable()); 
       Change<Reminder, Date>  dueChange = rec.getChange(properties.due_()); 
       Change<Reminder, Date>  comChange = rec.getChange(properties.completed_()); 
       System.err.print("Row "+(row+1)+" changed: "); 
       if(applicChange!=null){ 
        boolean applicValue = applicChange.getValue(); 
        System.out.println("applicable changed to "+applicValue); 
       } 
       if(dueChange!=null){ 
        Date dueValue = dueChange.getValue(); 
        System.out.println("due changed to: "+SimpleDate.convertFromDate(dueValue)); 
       } 
       if(comChange!=null){ 
        Date comValue = comChange.getValue(); 
        System.out.println("com changed to: "+SimpleDate.convertFromDate(comValue)); 
        try{ 
         fixDueDate(row,comValue, rem); 
        } 
        catch(Exception e){ 
         //boo. 
         System.err.println("Could not update the due date for this completion date change."); 
        } 
       } 
      } 
     }); 
     gridInitialized=true; 
    } 
    // Initialize the Revert Changes button. 
    revert.addSelectHandler(new SelectHandler(){ 
     @Override 
     public void onSelect(SelectEvent event) { 
      reminderStore.rejectChanges(); 
     } 
    }); 

    return widget; 
} 

내가 다른 열 제어 (다른하여 DateField) 조정 내 논리 배치를 희망하는 곳 방법 'fixDueDate이'입니다 :

private void fixDueDate(int row, Date completedDate, Reminder rem) throws InvalidDateFormatException, InvalidDateException{ 
    SimpleDate newCompDate = new SimpleDate(completedDate); 
    SimpleDate dueDate = newCompDate.addYears(rem.getRenewalYears()); 


    //rem.setDue(dueDate.getFormattedDate()); 
    //reminderStore.update(rem); 
} 

감사 .

private void fixDueDate(int row, Date completedDate, Reminder rem, Store<Reminder>.Record rec) 
     throws InvalidDateFormatException, InvalidDateException{ 
    SimpleDate newCompDate = new SimpleDate(completedDate); 
    SimpleDate dueDate = newCompDate.addYears(rem.getRenewalYears()); 

    rec.addChange(dueColumnConfig.getValueProvider(), dueDate.toDate()); 

} 

을하고 수정 된 필드 마크는 사용자 수정 필드 위의이 rec.addChange 호출에 의해 수정 된 필드에 모두 나타납니다

답변

0

이 작동합니다.