gwt - In GXT 3 how to access another field in same row during handling of onCompleteEdit event -
i have gridinlineediting object gxt 3.0 grid. works expected - can capture user editing events , find out row, column , model/change-record event.
what have not figured out how best access control in row.
specifically, have column model:
private void initializecolumnmodel() { // create configurations each column in 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 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); } and attempting intercept change 'completed date' value , programmatically operate 'due date' control (adding fixed number of years if user did it).
here's how capture event:
@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 "+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 due date completion date change."); } } } }); gridinitialized=true; } // initialize revert changes button. revert.addselecthandler(new selecthandler(){ @override public void onselect(selectevent event) { reminderstore.rejectchanges(); } }); return widget; } the method 'fixduedate' hope place logic adjusts other column control (another datefield):
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); } thanks.
this works:
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()); } and modified field marks appear on both user modified field , field modified rec.addchange call above.
Comments
Post a Comment