package com.smartgwt.sample.showcase.client.grid.grouping; import com.google.gwt.i18n.client.NumberFormat; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.GroupStartOpen; import com.smartgwt.client.types.RecordSummaryFunctionType; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; 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.ListGridSummaryField; import com.smartgwt.sample.showcase.client.PanelFactory; import com.smartgwt.sample.showcase.client.ShowcasePanel; import com.smartgwt.sample.showcase.client.data.OrderItemLocalDS; public class MultiGroupingSample extends ShowcasePanel { private static final String DESCRIPTION = "<p>Grids support multiple levels of grouping, including a built-in dialog that " + "allows users to configure grouping. This is enabled by a single setting: " + "<code>canMultiGroup</code>." + "<p>" + "The grid below is grouped by Category, then by Ship Date. Push the \"Configure Grouping\" " + "button to launch a dialog for configuring multi-level grouping. This can also be accessed " + "from the drop-down menu on any column header, via the \"Configure Grouping...\" menu item."; public static class Factory implements PanelFactory { private String id; public ShowcasePanel create() { MultiGroupingSample panel = new MultiGroupingSample(); id = panel.getID(); return panel; } public String getID() { return id; } public String getDescription() { return DESCRIPTION; } } public Canvas getViewPanel() { DataSource dataSource = OrderItemLocalDS.getInstance(); ListGridField orderIdField = new ListGridField("orderID"); orderIdField.setIncludeInRecordSummary(false); ListGridField itemDescriptionField = new ListGridField("itemDescription"); ListGridField categoryField = new ListGridField("category"); ListGridField shipDateField = new ListGridField("shipDate"); ListGridField quantityField = new ListGridField("quantity"); ListGridField unitPriceField = new ListGridField("unitPrice"); ListGridSummaryField totalField = new ListGridSummaryField("total", "Total"); totalField.setAlign(Alignment.RIGHT); totalField.setRecordSummaryFunction(RecordSummaryFunctionType.MULTIPLIER); totalField.setCellFormatter(new CellFormatter() { public String format(Object value, ListGridRecord record, int rowNum, int colNum) { if (value == null) return null; try { NumberFormat nf = NumberFormat.getFormat("#,##0.00"); return "$" + nf.format(((Number) value).doubleValue()); } catch (Exception e) { return value.toString(); } } }); final ListGrid listGrid = new ListGrid(); listGrid.setWidth(600); listGrid.setHeight(500); listGrid.setAutoFetchData(true); listGrid.setShowAllRecords(true); listGrid.setDataSource(dataSource); listGrid.setCanEdit(true); listGrid.setGroupByField("category", "shipDate"); listGrid.setGroupStartOpen(GroupStartOpen.ALL); listGrid.setCanMultiGroup(true); listGrid.setSortField("shipDate"); listGrid.setSortDirection(SortDirection.ASCENDING); listGrid.setFields(orderIdField, itemDescriptionField, categoryField, shipDateField, quantityField, unitPriceField, totalField); final IButton button = new IButton(); button.setTop(525); button.setTitle("Configure Grouping"); button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { listGrid.configureGrouping(); } }); final Canvas canvas = new Canvas(); canvas.addChild(listGrid); canvas.addChild(button); return canvas; } public String getIntro() { return DESCRIPTION; } }