I use the sample of "basic CubeGrid" by adding three listGrid: origin list, row list and column list. The user can hide the facet that he doesn't want to see by dragging it to the origin list; and can review the facet by dragging it to the row or column list. The code is:
First, the facet "Region" appears in the row list. I can drag it to the column list to show it as a column, then drag it to the origin list to hide it. Until now, it works fine; but then when I try to drag it to the row facet, a JS exception is thrown:
Caused by: com.google.gwt.core.client.JavaScriptException: (TypeError): this.rowFields[i][0] is undefined
fileName: http://127.0.0.1:8888/basicCubeGrid/sc/modules/ISC_Analytics.js
lineNumber: 445
I have checked that there is a fixedFacetValue on region when the addRowFacet() is called. But why it can not get the rowFields on region?
Thank you for any help.
Code:
public class BasicCubeGrid implements EntryPoint {
@Override
public void onModuleLoad() {
ListGrid originList = createDragListGrid();
originList.setFields(new ListGridField("title", "Origin"));
ListGridRecord region = new ListGridRecord();
region.setAttribute("id", "region");
region.setAttribute("title", "Region");
final ListGrid rowList = createDragListGrid();
rowList.setFields(new ListGridField("title", "Row"));
rowList.setData(new Record[] { region });
final ListGrid colList = createDragListGrid();
colList.setFields(new ListGridField("title", "Column"));
final CubeGrid cubeGrid = new CubeGrid();
cubeGrid.setData(ProductRevenueData.getData());
cubeGrid.setWidth100();
cubeGrid.setHeight100();
cubeGrid.setHideEmptyFacetValues(true);
cubeGrid.setShowCellContextMenus(true);
final NumberFormat numberFormat = NumberFormat.getFormat("0,000");
cubeGrid.setCellFormatter(new CellFormatter() {
@Override
public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
if (value == null)
return null;
try {
return numberFormat.format(((Number) value).longValue());
} catch (Exception e) {
return value.toString();
}
}
});
cubeGrid.setColumnFacets("quarter", "month", "metric");
cubeGrid.setRowFacets("region", "product");
originList.addRecordDropHandler(new RecordDropHandler() {
@Override
public void onRecordDrop(RecordDropEvent event) {
String facetId = event.getDropRecords()[0].getAttribute("id");
cubeGrid.setFixedFacetValue(facetId, "Eastern U.S.");
}
});
rowList.addRecordDropHandler(new RecordDropHandler() {
@Override
public void onRecordDrop(RecordDropEvent event) {
String facetId = event.getDropRecords()[0].getAttribute("id");
if (cubeGrid.getFacet(facetId) != null) {
cubeGrid.addRowFacet(facetId);
}
}
});
colList.addRecordDropHandler(new RecordDropHandler() {
@Override
public void onRecordDrop(RecordDropEvent event) {
String facetId = event.getDropRecords()[0].getAttribute("id");
if (cubeGrid.getFacet(facetId) != null) {
cubeGrid.addColumnFacet(facetId);
}
}
});
HStack stack = new HStack();
stack.setWidth100();
stack.setHeight100();
stack.setMembersMargin(20);
stack.addMember(originList);
stack.addMember(rowList);
stack.addMember(colList);
stack.addMember(cubeGrid);
stack.draw();
}
private ListGrid createDragListGrid() {
ListGrid listGrid = new ListGrid();
listGrid.setCanSort(false);
listGrid.setShowSortArrow(SortArrow.NONE);
listGrid.setSelectionType(SelectionStyle.SINGLE);
listGrid.setCanDragRecordsOut(true);
listGrid.setCanAcceptDroppedRecords(true);
listGrid.setCanReorderRecords(true);
listGrid.setDragDataAction(DragDataAction.MOVE);
listGrid.setHeight(100);
return listGrid;
}
}
Caused by: com.google.gwt.core.client.JavaScriptException: (TypeError): this.rowFields[i][0] is undefined
fileName: http://127.0.0.1:8888/basicCubeGrid/sc/modules/ISC_Analytics.js
lineNumber: 445
I have checked that there is a fixedFacetValue on region when the addRowFacet() is called. But why it can not get the rowFields on region?
Thank you for any help.