I have been able to create summary columns using the header menu on a ListGrid, but I need to be able to do that automatically in my program. I can't really work with the provided method
since I need to get attributes per record for the refint field, not for all records. I cannot see any other way to do it using the summary code.
To further illustrate what I've been trying to do, below is a test case. I have lowerBound and upperBound in the data source and I need to have them separate so I can do other calculations on them. But for the purposes of this particular grid, we need to put them in one column with a dash between the values. In the example, this field is represented as "refintField".
Test.java:
test1.xml:
I had been just creating the dummy refintField and combining the values from the record in the cell formatter. This technique was working last Friday (2/5/10) on that day's 2.0 snapshot, but when I came back to it on the following Monday's snapshot, that column was blank and I got errors in the dev console.
The error I get is:
It seems to be linked with the inclusion of grid.setShowAllEditors(true) for if I take it out everything displays just fine. I'm using SmartGWT 2.0-SNAPSHOT (latest) on SC 7.1 and Java 1.6.0_18.
So, is there a way to use the summary editors for what I need to do? If not, is there a way to display what I need to while keeping all editors open?
Thanks!
Code:
refintField.setSummaryFunction(new SummaryFunction() {
public Object getSummaryValue(Record[] records, ListGridField field) {
return null;
}
});
To further illustrate what I've been trying to do, below is a test case. I have lowerBound and upperBound in the data source and I need to have them separate so I can do other calculations on them. But for the purposes of this particular grid, we need to put them in one column with a dash between the values. In the example, this field is represented as "refintField".
Test.java:
Code:
package test;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.core.KeyIdentifier;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.RestDataSource;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.util.KeyCallback;
import com.smartgwt.client.util.Page;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.SummaryFunction;
import com.smartgwt.client.widgets.layout.VLayout;
public class Test implements EntryPoint {
private VLayout layout;
@Override
public void onModuleLoad() {
KeyIdentifier debugKey = new KeyIdentifier();
debugKey.setCtrlKey(true);
debugKey.setKeyName("D");
Page.registerKey(debugKey, new KeyCallback() {
public void execute(String keyName) {
SC.showConsole();
}
});
layout = new VLayout();
ListGrid grid = new ListGrid();
grid.setHeight("800");
grid.setWidth("600");
grid.setAutoFetchData(true);
grid.setAlwaysShowEditors(true);
RestDataSource gridDS = getDataSource();
grid.setDataSource(gridDS);
ListGridField nameField = new ListGridField("name");
nameField.setCanEdit(false);
ListGridField refintField = new ListGridField("refint");
refintField.setSummaryFunction(new SummaryFunction() {
public Object getSummaryValue(Record[] records, ListGridField field) {
return null;
}
});
refintField.setCanEdit(false);
refintField.setCellFormatter(new CellFormatter() {
public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
String lowerBound = record.getAttribute("lowerBound");
String upperBound = record.getAttribute("upperBound");
return lowerBound + " - " + upperBound;
}
});
grid.setFields(nameField, refintField);
layout.addMember(grid);
layout.draw();
}
private RestDataSource getDataSource() {
DataSourceField id = new DataSourceTextField("_id", "Id");
id.setPrimaryKey(true);
id.setRequired(true);
id.setHidden(true);
DataSourceField name = new DataSourceTextField("name", "Name");
name.setRequired(true);
DataSourceField lowerBound = new DataSourceTextField("lowerBound", "Lower Bound");
lowerBound.setRequired(true);
lowerBound.setHidden(true);
DataSourceField upperBound = new DataSourceTextField("upperBound", "Upper Bound");
upperBound.setRequired(true);
upperBound.setHidden(true);
RestDataSource datasource = new RestDataSource();
datasource.setDataURL("data/test1.xml");
datasource.setXmlRecordXPath("//labtest");
datasource.setFields(id, name, lowerBound, upperBound);
datasource.setClientOnly(true);
return datasource;
}
}
Code:
<?xml version="1.0" encoding="UTF-8"?> <data> <phase _n="5"> <labtests> <labtest _id="1"> <name>Test 1</name> <lowerBound>5.5</lowerBound> <upperBound>8.5</upperBound> </labtest> <labtest _id="2"> <name>Test 2</name> <lowerBound>12</lowerBound> <upperBound>18</upperBound> </labtest> <labtest _id="3"> <name>Test 3</name> <lowerBound>37</lowerBound> <upperBound>55</upperBound> </labtest> <labtest _id="4"> <name>Test 4</name> <lowerBound>60</lowerBound> <upperBound>77</upperBound> </labtest> <labtest _id="5"> <name>Test 5</name> <lowerBound>19.5</lowerBound> <upperBound>24.5</upperBound> </labtest> </labtests> </phase> </data>
The error I get is:
Code:
13:19:43.181:TMR0:WARN:gridEdit:isc_OID_1:startEditing() passed bad cell coordinates:,, can't edit 13:19:43.220:RDQ3:WARN:Log:TypeError: this.$286 is undefined
So, is there a way to use the summary editors for what I need to do? If not, is there a way to display what I need to while keeping all editors open?
Thanks!