我想用LINQ到SQL ASP.NET中显示由从TimeCheckIn减去TimeCheckOut在数据的GridView的持续时间只有一小时,分钟,和二

下面是后面的代码:

Dim db = new MyDataContext
Dim user = from u in db.Employees select IDNumber = u.IDNumber, _
           FirstName = u.firstName, LastName = u.lastName, TimeCheckIn = u.timeCheckIn, _
           TimeCheckOut = u.timeCheckOut, Duration = u.timeCheckIn
Gridview1.DataSource = user  
Gridview1.DataBind()

页上的代码:

  <asp:GridView ID="GridView1" runat="server" Width="100%" 
    AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="IDNumber" HeaderText="ID Number" ReadOnly="True" />
        <asp:BoundField DataField="FirstName" HeaderText="First Name" ReadOnly="True"/>
        <asp:BoundField DataField="LastName" HeaderText="Last Name" ReadOnly="True"/>
        <asp:BoundField DataField="TimeCheckIn" HeaderText="Time Check In" ReadOnly="True"/>
        <asp:BoundField DataField="TimeCheckOut" HeaderText="Time Check Out" ReadOnly="True" />
        <asp:TemplateField HeaderText="Duration">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# FieldDisplayDuration(Eval("Duration")) %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

下面是我的帮手FieldDisplayDuration:

Protected Function FieldDisplayDuration(ByVal Duration As DateTime) As String
    Dim rtn As String = "DefaultValue"
    Dim dif As TimeSpan = DateTime.Now.Subtract(Duration)
        rtn = dif.Hours & " hours, " & dif.Minutes & " minutes, " & dif.Seconds & " seconds. "
    Return rtn
End Function

在第3行中辅助功能,点心DIF作为时间跨度= DateTime.Now.Subtract(持续时间),其仅给出小时的持续时间,分,秒从TimeCheckIn直到DateTime.Now。不过,我想有从TimeCheckIn直到TimeCheckOut只在小时,分,秒的持续时间。我知道FieldDisplayDuration功能是完全错误的逻辑,但我只是想让你只能得到我的观点,也可能是为那些谁想要来计算录用日期的员工的持续时间的代码示例。最后,让我们从TimeCheckIn我们回到时间跨度由减TimeCheckOut在GridView的问题,我该怎么办呢?请给我一些线索..谢谢你这么多...

有帮助吗?

解决方案

有可能只是减去的日期和时间,以获得时间跨度,所以你应该能够使用

 Text='<%# FieldDisplayDuration(Eval("TimeCheckIn"), Eval("TimeCheckOut")) %>'

和是这样的功能:

Protected Function FieldDisplayDuration(ByVal CheckIn As DateTime, ByVal CheckOut as DateTime) As String    
    Dim rtn As String = "DefaultValue"    
    Dim dif As TimeSpan = CheckOut - CheckIn        
    rtn = dif.Hours & " hours, " & dif.Minutes & " minutes, " & dif.Seconds & " seconds. "    
    Return rtnEnd 
Function

虽然我可能会使用在rturn行的字符串格式,并做到这一点...

rtn = string.Format("{0} hours, {1} minutes, {2} seconds.", dif.Hours, dif.Minutes, difSeconds)

正如我认为这是更容易阅读。

其他提示

您可以把逻辑来计算在SELECT子句的持续时间正确,就像这样:

Dim user = from u in db.Employees select IDNumber = u.IDNumber, _
       FirstName = u.firstName, LastName = u.lastName, TimeCheckIn = u.timeCheckIn, _
       TimeCheckOut = u.timeCheckOut, Duration = u.timeCheckOut.Subtract(u.timeCheckIn)

然后,你只需要格式化所得时间跨度。

另外,你可以做到这一切的选择,甚至可以调用一个函数,所以有一些像

Duration = FormatDuration(u.timeCheckOut.Subtract(u.timeCheckIn)

Duration = FormatDuration(u.timeCheckIn, u.timeCheckOut)\

如果你这样做,并假设FormatDuration返回的字符串,你就可以与列模板做掉完全

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top