GroupBy是根据提供的几列对某一列数据进行统计,结果有DataTableHelp类型返回。
语法:
GroupBy(groupOn,agreegateColName,aggregateType)
参数说明
名称 | 说明 |
groupOn | 必填项,字符串类型,分组依据列的清单。各个列之间用“,”分隔开,例如:Col1,Col2,Name。 |
agreegateColName | 必填项,字符串类型,需要统计的列名称。这里只可以输入一个统计列。如果需要统计多列的,请使用PivotDataTable。 |
aggregateType | 可选项,AggregateTypeEnum类型枚举,统计的类型。默认值为Sum。 |
///<summary> ///统计函数类型 ///</summary> public enum AggregateTypeEnum { //没有统计 None = 0, //计数 Count = 1, //求和 Sum = 2, //第一个 First = 3, //最后一个 Last = 4, //平均值 Average = 5, //最大值 Max = 6, //最小值 Min = 7, //是否存在 Exists = 8, //样本方差 Var = 9, //样本标准偏差 Std = 10, //总体方差 VarP = 11, //总体标准偏差 StdP = 12 } |
原始数据如下:
Vb.Net |
Dim tbl As SmGrid=Proj.CurrentSmGrid '根据"产品,业务员"进行分组统计"数量"列 Dim dt As DataTableHelp= tbl.DataTableHelp.GroupBy("产品,业务员","数量") '这是一种Linq表达式的用法显示标题,看不懂的就用下面普通的遍历 Proj.MsgDebug.Add(String.Join("|",dt.DataCols.Select(Of String)(Function(col As ColData) col.Name))) '遍历标题 Dim strColName As String For Each col As ColData In dt.DataCols strColName=strColName & "|" & col.Name Next Proj.MsgDebug.Add(strColName.Trim("|")) '遍历所有行 For Each dr As RowData In dt.DataRows Proj.MsgDebug.Add(String.Join("|",dr.BaseRow.ItemArray)) Next Proj.MsgDebug.Add("---------下面开始统计计数--------") '指定统计类型为Count,计数 dt = tbl.DataTableHelp.GroupBy("产品,业务员","数量",AggregateTypeEnum.Count) '这是一种Linq表达式的用法,看不懂的就用下面普通的遍历 Proj.MsgDebug.Add(String.Join("|",dt.DataCols.Select(Of String)(Function(col As ColData) col.Name))) '遍历所有行 For Each dr As RowData In dt.DataRows Proj.MsgDebug.Add(String.Join("|",dr.BaseRow.ItemArray)) Next '返回结果:产品|业务员|数量.Sum '返回结果:产品|业务员|数量.Sum '返回结果:产品01|业务员03|2262 '返回结果:产品02|业务员03|468 '返回结果:产品03|业务员03|3657 '返回结果:产品04|业务员03|4031 '返回结果:产品05|业务员03|1748 '返回结果:---------下面开始统计计数-------- '返回结果:产品|业务员|数量.Count '返回结果:产品01|业务员03|5 '返回结果:产品02|业务员03|1 '返回结果:产品03|业务员03|7 '返回结果:产品04|业务员03|8 '返回结果:产品05|业务员03|4 |
C# |
SmGrid tbl = Proj.CurrentSmGrid; // 根据"产品,业务员"进行分组统计"数量"列 DataTableHelp dt = tbl.DataTableHelp.GroupBy("产品,业务员", "数量"); // 这是一种Linq表达式的用法显示标题,看不懂的就用下面普通的遍历 Proj.MsgDebug.Add(string.Join("|", dt.DataCols.Select(col => col.Name))); // 遍历标题 string strColName=""; foreach (ColData col in dt.DataCols) strColName = strColName + "|" + col.Name; Proj.MsgDebug.Add(strColName.Trim("|")); // 遍历所有行 foreach (RowData dr in dt.DataRows) Proj.MsgDebug.Add(string.Join("|", dr.BaseRow.ItemArray)); Proj.MsgDebug.Add("---------下面开始统计计数--------"); // 指定统计类型为Count,计数 dt = tbl.DataTableHelp.GroupBy("产品,业务员", "数量", AggregateTypeEnum.Count); // 这是一种Linq表达式的用法,看不懂的就用下面普通的遍历 Proj.MsgDebug.Add(string.Join("|", dt.DataCols.Select(col => col.Name))); // 遍历所有行 foreach (RowData dr in dt.DataRows) Proj.MsgDebug.Add(string.Join("|", dr.BaseRow.ItemArray)); //返回结果:产品|业务员|数量.Sum //返回结果:产品|业务员|数量.Sum //返回结果:产品01|业务员03|2262 //返回结果:产品02|业务员03|468 //返回结果:产品03|业务员03|3657 //返回结果:产品04|业务员03|4031 //返回结果:产品05|业务员03|1748 //返回结果:---------下面开始统计计数-------- //返回结果:产品|业务员|数量.Count //返回结果:产品01|业务员03|5 //返回结果:产品02|业务员03|1 //返回结果:产品03|业务员03|7 //返回结果:产品04|业务员03|8 //返回结果:产品05|业务员03|4 |
另外参考“数据查询Demo”中的演示效果。
Vb.Net |
Public Sub btnGroupBy_Click(sender As Object,e As System.EventArgs) '分组统计求和 Dim dt As DataTableHelp= tblMain1.DataTableHelp.GroupBy("产品,业务员","数量") tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来 End Sub Public Sub btnGroupBy2_Click(sender As Object,e As System.EventArgs) '分组统计计数 Dim dt As DataTableHelp = tblMain1.DataTableHelp.GroupBy("产品,业务员","数量",AggregateTypeEnum.Count) tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来 End Sub |
C# |
public void btnGroupBy_Click(object sender, System.EventArgs e) { // 分组统计求和 DataTableHelp dt = tblMain1.DataTableHelp.GroupBy("产品,业务员", "数量"); tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来 } public void btnGroupBy2_Click(object sender, System.EventArgs e) { // 分组统计计数 DataTableHelp dt = tblMain1.DataTableHelp.GroupBy("产品,业务员", "数量", AggregateTypeEnum.Count); tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来 } |