addSubtotals method
Future<void>
addSubtotals(
- Iterable<
int> amountCols, - Iterable<
VolvoxGridSubtotalLevel> levels, { - AggregateType aggregate = AggregateType.AGG_SUM,
- bool clearExisting = true,
- int mergeColFrom = _subtotalNoMergeColumn,
- int mergeColTo = _subtotalNoMergeColumn,
Add subtotals for multiple aggregate columns and grouping levels.
Implementation
Future<void> addSubtotals(
Iterable<int> amountCols,
Iterable<VolvoxGridSubtotalLevel> levels, {
AggregateType aggregate = AggregateType.AGG_SUM,
bool clearExisting = true,
int mergeColFrom = _subtotalNoMergeColumn,
int mergeColTo = _subtotalNoMergeColumn,
}) async {
final amountList = amountCols.toList();
final levelList = levels.toList();
if (!isCreated || amountList.isEmpty || levelList.isEmpty) return;
await withRedrawSuspended(() async {
if (amountList.length > 1) {
await _configure(
GridConfig()..outline = (OutlineConfig()..multiTotals = true));
}
if (clearExisting) {
await subtotal(
AggregateType.AGG_CLEAR,
groupOnCol: _subtotalClearColumn,
aggregateCol: _subtotalClearColumn,
caption: '',
backColor: _subtotalClearColor,
foreColor: _subtotalClearColor,
addOutline: false,
);
}
final wantMerge = mergeColFrom >= _subtotalMinValidMergeColumn &&
mergeColTo >= mergeColFrom;
for (final level in levelList) {
final groupIndex = level.groupCol ?? _subtotalNoGroupColumn;
for (final col in amountList) {
final result = await subtotal(
aggregate,
groupOnCol: groupIndex,
aggregateCol: col,
caption: level.caption,
backColor: level.backColor,
foreColor: level.foreColor,
addOutline: true,
);
if (wantMerge) {
await _mergeSubtotalLevelZero(result, mergeColFrom, mergeColTo);
}
}
}
});
}