Environment:
smartgwt-4.0p-2013-12-17
When editing a new list grid record with startEditingNew(defaultValues), the default values are not provided any more in
This worked at least until 3.0p-2013-01-08.
Now canEditCell seems first to be invoked with an empty record and then again with the record containing the default values.
I have expected that before canEditCell is invoked, the new record is populated with the default values.
Has this been intentionally changed or is this a bug?
Example, drawn from the showcase "grid_editing_new_row"
Output when editing a new record:
smartgwt-4.0p-2013-12-17
When editing a new list grid record with startEditingNew(defaultValues), the default values are not provided any more in
Code:
protected boolean canEditCell(int rowNum, int colNum) {
Record record = getEditedRecord(rowNum);
}
Now canEditCell seems first to be invoked with an empty record and then again with the record containing the default values.
I have expected that before canEditCell is invoked, the new record is populated with the default values.
Has this been intentionally changed or is this a bug?
Example, drawn from the showcase "grid_editing_new_row"
Code:
@Override
public void onModuleLoad() {
Canvas canvas = new Canvas();
final ListGrid countryGrid = new ListGrid() {
@Override
protected boolean canEditCell(int rowNum, int colNum) {
Record editedRecord = getEditedRecord(rowNum);
ListGridField f = this.getField(colNum);
System.out.println("Row/Col=" + rowNum + "/" + colNum + ", Fname=" + f.getName() + ", EditedRecord.countryName=" + editedRecord.getAttribute("countryName"));
return super.canEditCell(rowNum, colNum);
}
};
countryGrid.setWidth(550);
countryGrid.setHeight(224);
countryGrid.setShowAllRecords(true);
countryGrid.setCellHeight(22);
countryGrid.setID("countryList");
countryGrid.setDataSource(CountryXmlDS.getInstance());
ListGridField nameField = new ListGridField("countryName", "Country");
countryGrid.setFields(nameField);
countryGrid.setAutoFetchData(true);
countryGrid.setCanEdit(true);
countryGrid.setEditEvent(ListGridEditEvent.CLICK);
countryGrid.setListEndEditAction(RowEndEditAction.NEXT);
canvas.addChild(countryGrid);
IButton button = new IButton("Edit New");
button.setTop(250);
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Map<String, String> map = new HashMap<String, String>();
map.put("countryName", "whatever");
countryGrid.startEditingNew(map);
}
});
canvas.addChild(button);
canvas.draw();
}
public static class CountryXmlDS extends DataSource {
private static CountryXmlDS instance = null;
public static CountryXmlDS getInstance() {
if (instance == null) {
instance = new CountryXmlDS("countryDS");
}
return instance;
}
public CountryXmlDS(String id) {
setID(id);
setRecordXPath("/List/country");
DataSourceIntegerField pkField = new DataSourceIntegerField("pk");
pkField.setHidden(true);
pkField.setPrimaryKey(true);
DataSourceTextField countryNameField = new DataSourceTextField("countryName", "Country");
countryNameField.setRequired(true);
setFields(pkField, countryNameField);
setClientOnly(true);
}
}
Code:
Row/Col=0/0, Fname=countryName, EditedRecord.countryName=null Row/Col=0/0, Fname=countryName, EditedRecord.countryName=whatever Row/Col=0/0, Fname=countryName, EditedRecord.countryName=whatever
Comment