我正在开发一个名册应用程序(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。
答案 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。