为Gridview绑定数据透视表

时间:2011-06-08 06:55:42

标签: asp.net vb.net gridview dataset pivot-table

我正在开发一个名册应用程序(asp.net用VB + sql server)让用户输入移位值记录,建议屏幕如下:

示例屏幕: http://i326.photobucket.com/albums/k421/joeyan829/asp/SMW-1-1.jpg

对于数据库设计,每个员工每天都会有一条记录。

列名:

staff_key,shift_date,start_time,end_time,shift_patten,SL,VL,ML,PH,APH等。

示例数据:

123,23-5-2011,9:00,17:00,A,N,N,N,N,N

123,24-5-2011,12:00,19:00,B,N,N,N,N,N

123,25-5-2011,12:00,19:00,B,N,N,N,N,N

我知道我需要使用数据透视表,然后将其绑定到gridview,

示例

(Peter,COII)第1栏第23/5页(Peter,COII)24/5第2栏.....第1行

sql server statement:

select troster.staff_key, shift_date, start_time, end_time, 
shift_type, SL, VL, ML, PH, APH 
from
troster 
right join 
hris_leave.dbo.tstaff 
on 
hris_leave.dbo.tstaff.staff_key=troster.staff_key
where 
troster.shift_date 
in 
('5/23/2011', '5/24/2011', '5/25/2011', '5/26/2011', 
'5/27/2011', '5/28/2011', '5/29/2011')

但我仍然不知道如何修改/编写上面的SQL,使其成为一个数据透视表,并将其绑定到gridview。

1 个答案:

答案 0 :(得分:1)

我认为你不应该以数据库查询和网格之间的直接映射为目标。 相反,基于按周过滤的查询结果集,逐个单元构建网格。

可以使用ASP.NET GridView执行此操作,但它绝不是一个干净的解决方案。 我会使用scheduler control,如果不可用,则从HTML元素和简单的asp.net控件构建一个。

使用Gridview时,基本结构是一个九列网格,其中日期的列标题标签是根据所选周计算的。 GridView数据源每个工作人员会有一行,需要所有数据(staff_key,name),也许还有日期列的日期键。

RowDataBound事件中,您将使用(staff_key,date_key)对来查找单元格数据。内存查询(例如LINQ to objects或ADO.NET数据结构查询)应该没问题,但是应该最小化数据库查询的数量并加载每周数据一次。

拥有可编辑的单元格使得管理网格变得更加复杂,因为在日期列中需要TemplateFields,使用ItemTemplate和EditItemTemplate。