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 호출에 의해 수정 된 필드에 모두 나타납니다