你可以把得出来的datatable,进行处理,然后重新绑定。
解决方案 »
- WinForm DV控件 pivotGridControl获取列值? [图]
- 通过委托实现窗口刷新
- DataGridView下拉框事件……问题
- oracle system.data.oracleclient 怎么获得所有的sql语句,
- 急~~~~系统快捷键的问题?Keys.XXX,如何从配置文件中加入到XXX!在线等(70分)
- 跪求几个问题
- web页面默认值的问题
- ftp://csdn:[email protected]:2121还开放吗?为什么连不上?
- C# DLLIMPORT 相对路径 问题
- System.Net.NetworkCredential("用户名","密码")中的用户名和密码在linux系统中是什么?
- 怎样设置光标位置﹖
- 如何使用VPN来访问公司内部的数据库服务器
得到數據後綁定
例:
public DataView getCommonRec() { try { DataView dv=new DataView(); dv=_dsAll.Tables[0].DefaultView; dv.RowFilter="RAYSTATUS4UPK='110' and (RAYSTATUS<>'100' and RAYSTATUS<>'200')"; return dv; } catch(Exception err) { throw err; } }对取得的数据源过滤
a例 b例 C例 D例
a b c 20
a b d 40
a c c 20
得到如下的dataGrid
a例 b例 C例 D例
a b c 20
a b C小计 20
a b d 40
a b d小计 40
a b小计 60
a c c 20
a c c小计 20 //可以没有此行
a c小计 20
a小计 80
将你小计的内容放进去
dataGrid1.DataSource = dv1;
1、建DataTable dt2,2列(需要分组的列数-1)
2、string c1="",c2=""
3、循环dt1,c1为a列,c2为a列+b列,
如果当前行的a列!=c1,存入dt2;a列+b列!=c2,存入dt2
得到dt2中就为
1: a null
2: a b
3: a c
4、需要插入的小计行数目就是dt1.Rows.Count+dt2.Rows.Count
5、循环dt1,插入c列小计的小计行
6、循环dt2,插入a列小计和b列小计的小计行
插入小计行的计算就是,例如计算a列="a",b列="b"的小计
dt1.Compute("Sum(D列)","a列=a and b列=b");
8、最后dv1.Sort = "a列,b列,c列";
思路就是这样的了,我就做了1列分组的,多列嫌麻烦:)
注意:
你插入的小计处于中间是排序后的结果,实际是在dt1的最后的;
插入的行太多(几百条好像没问题),速度有点慢。
对给定的SQL语句生成一个临时表,再对临时表1进行处理;
1. 临时表1中的数据放入临时表2,需要把分组列均改为字符类型
2. 处理分组数据所有列的分组,所有分组列均改为字符类型,最后分组列中的值为列值加“小计”,插入到临时表中,
3. 再把分组列最后的分组列去掉,再对其进行分组,现在的所有分组列均改为字符类型,现在分组列的最后一列的值为列值加“小计”,去掉分组列的值为“最大的字符串”;
4. 重复第2步,直到把所有分组列处理完
5. 显示时直接从临时表2中取数,需要把“最在的字符串”改为空串(“”),对所有分组列进行按升序排序列出。