ASP与SQL DB和VB代码背后。编辑返回的数据

时间:2012-07-09 14:52:21

标签: asp.net sql sql-server

我正在尝试为我正在进行的项目编写时间表应用程序代码,并且在一个月的最佳时间里,我没有进行系统的关键部分。我需要能够通过周一视图Mon-Sun编辑和添加数据到应用程序中。我有一个SQL(服务器)透视,可以每天返回我的数据,但由于它使用动态标题来表示一周中的日期,因此要编辑的gridview函数将无法正常工作。 我已经尝试过绑定数据,但这与日期有相同的问题。我想我需要创建一个包含文本框的表单来输入数据并以这种方式更新,但是如何使用我的查询填充这样的表单?我还需要能够添加新行。我正处于我的束缚之中,并且即将放弃编码,因为它现在只是强调我。

继承我的SQL,它显示了我想要的数据:

ALTER PROCEDURE [dbo].[list_weekly_times]
as



DECLARE @offSetmon int, @fromdt datetime,@todt datetime,@offsetsun int, @COLName    varchar (max)
,     @SQL        varchar (max), @fromdate as date, @todate as date, @offsetmonval as int, @offsetsunval as int

SELECT @offSetmon = 1
select @fromdt = GETDATE()
SELECT @offSetSun = 7
select @todt = GETDATE()
SELECT @fromdt = CONVERT(DATETIME, CONVERT(INT, @fromdt) - (DATEPART(WEEKDAY, @fromdt) - @offSetmon))
SELECT @todt = CONVERT(DATETIME, CONVERT(INT, @todt) - (DATEPART(WEEKDAY, @todt) - @offSetsun))


select @COLName    = ''
 ,    @SQL        = ''


while @FromDt <= @ToDt
begin
      if    (@COLName = '')
      begin
            set   @COLName    = '[' + convert (varchar (10), @FromDt, 121) + ']'
      end
      else
      begin
            set   @COLName    = @COLName + ', [' + convert (varchar (10), @FromDt, 121) + ']'
      end
      set   @FromDt = dateadd (d, 1, @FromDt)
end
print @COLName
select      @SQL  = 'select project_code, activity_code,' + @COLName + 
              ' From (select project_code, activity_code, project_date, Project_time from timesheet) as P 
                pivot 
                  (     sum (Project_time)
                        for project_date in (' + @COLName + ')
                  ) as pvt
                order by project_code

              '
print @SQL
exec  (@SQL)

由于枢轴设计用于数据显示而不是数据编辑,因此无法进行编辑。

也许枢轴方法是错误的,需要另一个方向。

任何帮助,教程,示例都会有所帮助。

2 个答案:

答案 0 :(得分:1)

<强> STOP 即可。您通过动态编写的SQL语句将数据的客户端显示与数据的物理结构相结合。 这会让你成为所有可能世界中最糟糕的世界。

理想情况下,您可以在ASP.NET中使用或创建一个控件,它可以直接从timesheet表中获取您的优秀和窄行,并完全处理ASP.NET层中的数据输入。

如果由于某种原因你无法做到这一点并且需要在服务器上有周数据(例如,你有一个需要全部批准的每周工资单),你应该创建一个可更新的表或专用于timecard_rows的视图,一周中每天有七个字段和一些“基准日期”指示符,因此您可以将所有七个字段强制进出timesheet表。

答案 1 :(得分:0)

为什么不为此使用触发器。

假设您有这样的观点:

create view TimeCards
as
select yourDate FirstDayOfWeek
,      sum(case when day = 1 then hours else 0) end sun
,      sum(case when day = 2 then hours else 0) end mon
,      sum(case when day = 3 then hours else 0) end tue
,      sum(case when day = 4 then hours else 0) end wed
,      sum(case when day = 5 then hours else 0) end thu
,      sum(case when day = 6 then hours else 0) end fri
,      sum(case when day = 7 then hours else 0) end sat
from   table
group
by     WeekNumber

然后在触发器中更新这样的小时:

create trigger TimeCards_Upd on TimeCards
instead of update
as
begin
    delete table
    where  date = yourDate + 0 -- sun

    insert
    into  table
    ( yourDate
    , hours
    )
    values
    ( date + 0 -- sun
    , sun -- hours from sunday
    )

    -- repeat for every other day
end;