首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

只剩下一点点分了,一个对小弟我来说比较棘手的有关问题(Gridview追加列的有关问题)

2012-01-19 
只剩下一点点分了,一个对我来说比较棘手的问题(Gridview追加列的问题)功能如下:有如下一个表(TABLE1):归属

只剩下一点点分了,一个对我来说比较棘手的问题(Gridview追加列的问题)
功能如下:

有如下一个表(TABLE1):

归属日期       班级       学生     工作类别       所用时间
9.1                   一           A             擦桌子             8
9.1                   一           B             拖地                 7
9.2                   一           C             拖地                 6
9.1                   一           D             擦桌子             5

9.1                   二           E             拖地                 4
9.3                   二           F             拖地                 5
9.1                   二           G             拖地                 6

9.4                   三           H             擦桌子             10
9.1                   三           I             擦窗户             9
9.2                   三           J             擦窗户             8
9.2                   三           K             拖地                 7
9.1                   三           L             擦桌子             6
9.2                   三           M             擦桌子             5
9.1                   三           N             拖地                 4

相关字段如下:       归属日期     Date
                                班         级     Class
                                学         生     Student
                                工作类别     Sort(Sort=1     擦桌子;Sort=2     擦窗户;Sort=3   拖地)


                                所用时间     Time    

查询条件为归属日期从9.1到9.4,我想得到如下结果:
班级         擦桌子       擦窗户         拖地       合计
一                 13               0                 13           26
二                   0               0                 14           14
三                 21               17               11           49    

我的想法如下:
(1)   先按归属日期将符合条件的班级(不重复)用Gridview显示出来
SELECT   distinct   Class   from   TABLE1   执行后得到如下结果:  
一  
二  

(2)   然后就是追加列的问题了.例如:(以班级一为例)  
//统计班级一的擦桌子所用时间总和
  Select   sum(Time)   from   TABLE1   WHERE   Sort=1   and   Class= "一 "  
//统计班级一的擦窗户所用时间总和  
Select   sum(Time)   from   TABLE1   WHERE   Sort=2   and   Class= "一 "  
//统计班级一的擦窗户所用时间总和  
Select   sum(Time)   from   TABLE1   WHERE   Sort=3   and   Class= "一 "  
如果能查询到数据,将数据添加到相应的单元格,如果查询不到,就将0添加到相应的单元格(也就是说班级一没有同学擦窗户,那在最后的结果中为0)
不知道我的想法是否合理,能否实现,
如果能的话,   那具体应该怎么追加Gridview中的列.
如果我的想法不能实现,那不知道还有没有更好的方法或者思想.分虽然很少,但还是急切的希望各位大虾能帮帮我,谢谢各位了!!!  




[解决办法]
在OnInit()事件里
加TemplateField
[解决办法]
看到“擦桌子 擦窗户 拖地”觉得很眼熟阿,呵呵
我觉得合适的做法还是写出sql然后绑定。
非要这么做的话,现取出“一 ”,itembound的时候作为条件在写sql访问数据库取 "擦桌子 擦窗户 拖地 ",
数据库算是累坏了。

sql直接写不出来吗?那帖子不是给答案了吗?

[解决办法]
declare @T table(归属日期 varchar(20),班级 varchar(20), 学生 varchar(20),工作类别 varchar(20), 所用时间 int)

insert @T select '9.1 ', '一 ' , 'A ', '擦桌子 ',8

union all select '9.1 ', '一 ' , 'B ', '拖地 ',7

union all select '9.1 ', '一 ' , 'C ', '拖地 ',6

union all select '9.1 ', '一 ' , 'D ', '擦桌子 ',5

union all select '9.1 ', '二 ' , 'E ', '拖地 ',4

union all select '9.1 ', '二 ' , 'F ', '拖地 ',5

union all select '9.1 ', '二 ' , 'G ', '拖地 ',6

union all select '9.1 ', '三 ' , 'H ', '擦桌子 ',10

union all select '9.1 ', '三 ' , 'I ', '擦窗户 ',9

union all select '9.1 ', '三 ' , 'J ', '擦窗户 ',8

union all select '9.1 ', '三 ' , 'K ', '拖地 ',7

union all select '9.1 ', '三 ' , 'L ', '擦桌子 ',6

union all select '9.1 ', '三 ' , 'M ', '擦桌子 ',5

union all select '9.1 ', '三 ' , 'N ', '拖地 ',4



select * from @t

select 班级,
擦桌子=sum(case when 工作类别= '擦桌子 ' then 所用时间 else 0 end) ,
擦窗户=sum(case when 工作类别= '擦窗户 ' then 所用时间 else 0 end) ,
拖地 =sum(case when 工作类别= '拖地 ' then 所用时间 else 0 end),
合计 =sum(所用时间)
from @T group by 班级 order by charindex(班级, '一,二,三 ')

测试结果

一 1301326
二 001515
三 21171149
[解决办法]
是内容可能有很多项吗?
关于纵向数据转横向,有很多例子的,LZ可以搜一下

热点排行