C1FlexGrid.Subtotal方法可以增加包含普通(非小计)行的汇总数据的分类汇总行。
分类汇总支持分层聚合。例如,如果你的表格包含销售数据,你可能会通过产品、地区和推销员来小计一下以得出总的销售数字。下面的代码说明了这一点:
1: private void UpdateTotals()
2: {
3: // clear existing totals
4: _flex.Subtotal(AggregateEnum.Clear);
5:
6: // calculate subtotals (three levels, totals on every column)
7: for (int c = 3; c < _flex.Cols.Count; c++)
8: {
9: if (_chkGrand.Checked)
10: _flex.Subtotal(AggregateEnum.Sum, 0, -1, c, "各类产品合计");
11: if (_chkDirection.Checked)
12: _flex.Subtotal(AggregateEnum.Sum, 1, 1, c, "{0}合计");
13: if (_chkRegion.Checked)
14: _flex.Subtotal(AggregateEnum.Sum, 2, 2, c, "{0}方区域合计");
15: }
16:
17: // done, autosize columns to finish
18: _flex.AutoSizeCols();
19: }
代码中重要接口说明:
_flex.Tree.Column:获取或设置树形结构在哪一列显示。
_flex.Subtotal(AggregateEnum.Sum, -1, -1, 3, "Grand Total");
参数1:同时方式
参数2:当前树节点的级别,-1 为最外层节点
参数3:用于获取分组信息的列
参数4:统计的列
参数5:分组说明文本信息
即上述代码设置了三层分组,第一层为所有销售信息的汇总。第二层以产品类别分组,第三层以区域信息进行分组。
当C1FlexGrid.Subtotal方法添加了汇总信息行,它会自动分配汇总样式到新的行(有五个层级的分类汇总内置样式)。你可以使用“样式编辑器”或代码在设计器中改变大纲样式的属性,以此来自定义分类汇总行的外观。例如:
1: // 设置分类汇总的样式。
2: CellStyle cs;
3: cs = _flex.Styles[CellStyleEnum.GrandTotal];
4: cs.BackColor = Color.Black;
5: cs.ForeColor = Color.White;
6: cs.Font = new Font(Font, FontStyle.Bold);
7: cs = _flex.Styles[CellStyleEnum.Subtotal0];
8: cs.BackColor = Color.DarkRed;
9: cs.ForeColor = Color.White;
10: cs.Font = new Font(Font, FontStyle.Bold);
11: cs = _flex.Styles[CellStyleEnum.Subtotal1];
12: cs.BackColor = Color.DarkBlue;
13: cs.ForeColor = Color.White;
14:
执行此代码后,表格看起来是这样的:
除了总量之外,你也可以计算其他分类汇总(例如,平均值或百分比),并计算每一行的几个汇总(例如,毛销售额及净销售额)。
Demo 下载:
VS2010 + C# + Framework 4.0 + Studio for Winforms 2013V3 点击下载
VS2010 + VB.NET + Framework 4.0 + Studio for Winforms 2013V3 点击下载