首页 文章

获取VB ASP.Net中具有时差的报表的SQL数据

提问于
浏览
0

我一直在努力让报告正确显示 . 我想要实现的是我有预计工作时间的项目 . 员工记录他们的时间表条目,(开始\结束)日期和时间被保存到这个特定项目和员工的SQL表中,所以我想报告项目的预计小时数与员工真正花费的时间,这里是我正在用代码做的场景:

我有的表:

1项目表---> ProjectID,估算项目估算持续时间(小时)2-ProjectResources表---> ProjectID,ResourceID 3-Timesheet条目表---> Timesheetentry ID,ProjectID,UserID,StartDateTime,EndDateTime

我创建的内容如下:

1-I填充下拉列表,项目名称为文本,项目ID为值

2 - 在列表selectedIndexChanged事件中我查询以获取Project的所有资源,如下所示:

Dim TimesheetsTotalTime As Decimal = 0 Dim query As String =“SELECT resourceid FROM projectresources where projectID ='”&ProjectID&“'”Dim dt As DataTable = GetData(query)

对于x As Integer = 0 to dt.Rows.Count - 1 Dim resourceID As Integer resourceID = dt.Rows(x).Item(0)totalTimesheetTime = totalTimesheetTime GetTotalTimesheetsPerUser(ProjectID,resourceID)

下一步

专用共享函数GetTotalTimesheetsPerUser(ProjectID为整数,ResourceID为整数)为十进制Dim TimesheetsTotalTime为十进制= 0

Dim query As String = "SELECT timesheetid FROM timesheet where projectID='" & ProjectID & "' and userid='" & ResourceID & "'"

    Dim dt As DataTable = GetData(query)

    For x As Integer = 0 To dt.Rows.Count - 1

        Dim TimesheetID As Integer
        TimesheetID = dt.Rows(x).Item(0).ToString

        TimesheetsTotalTime = TimesheetsTotalTime + GetTimeDifferenceForTask(TimesheetID)

    Next
    Return TimesheetsTotalTime

结束功能

私有共享函数GetTimeDifferenceForTask(timeSheetID As Integer)As Decimal Dim CountedHours As Decimal

Dim query As String = "SELECT StartTime, EndTime FROM Timesheet where TimesheetID='" & timeSheetID & "'"
    Dim dt As DataTable = GetData(query)
    If dt.Rows.Count > 0 Then
        Dim startTime As DateTime = dt.Rows(0).Item(0)
        Dim endTime As DateTime = dt.Rows(0).Item(1)
        CountedHours = DateDiff(DateInterval.Hour, startTime, endTime)

        Return CountedHours
    End If

结束功能

每当我将最终数据添加到RadHTMLChart时,返回的时间都是所有用户的所有时间表条目的总数不正确 . 我得到的总共“13”小时而数字是13.5而另一个项目我得到“17”小时,而它应该是29 .

请指教,谢谢 .

1 回答

  • 0

    你得到13而不是13.5,因为 DateDiffDateInterval.Hour 中计算 . 要获得 decimal 结果,您正在寻找将其更改为:

    CountedHours = DateDiff(DateInterval.Minute, startTime, endTime) / 60
    

    至于获得23的结果时,预期29 ...确保您的输入是 datetime 而不仅仅是 time ,如果结果相同 - 发布输入值以进行分析 .

相关问题