ColumnModel cm = new ColumnModel(columns);
cm.addAggregationRow(totalSummary);
// Heading groups
cm.addHeaderGroup(0, 1, new HeaderGroupConfig(messages.sousTraitant().toUpperCase(), 1, 3));
cm.addHeaderGroup(0, 4, new HeaderGroupConfig(messages.budgetConforme().toUpperCase(), 1, 5));
cm.addHeaderGroup(0, 9, new HeaderGroupConfig(messages.suiviTraite().toUpperCase(), 1, 6));
cm.addHeaderGroup(0, 15, new HeaderGroupConfig("ECARTS", 1, 5));
cm.addHeaderGroup(0, 20, new HeaderGroupConfig("AVANCEMENT / MARCHE", 1, 4));
cm.addHeaderGroup(0, 24, new HeaderGroupConfig("RETENUES APPLIQUEES", 1, 11));
cm.addHeaderGroup(0, 35, new HeaderGroupConfig("PRORATA / VARIATION", 1, 7));
SummaryColumnConfig actionsColumn = (SummaryColumnConfig) cm.getColumnById(FicheStDto.ID);
actionsColumn.setRenderer(createActionButtonsRenderer());
String groupingColumnId = combineProps(FicheStDto.LOT_TYPE, LotTypeDto.NAME);
SummaryColumnConfig<Number> groupingColumn = new SummaryColumnConfig<Number>(groupingColumnId, "Lot<br>type", 50);