Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LINQ to SQL在Gridview Asp.Net中仅显示持续时间小时:分钟:秒?_Asp.net_Vb.net_Linq To Sql_Gridview_Timespan - Fatal编程技术网

如何使用LINQ to SQL在Gridview Asp.Net中仅显示持续时间小时:分钟:秒?

如何使用LINQ to SQL在Gridview Asp.Net中仅显示持续时间小时:分钟:秒?,asp.net,vb.net,linq-to-sql,gridview,timespan,Asp.net,Vb.net,Linq To Sql,Gridview,Timespan,我想通过使用LINQ to SQL从ASP.NET中的TimeCheckIn中减去TimeCheckOut,在data Gridview中仅显示小时、分钟和秒的持续时间 下面是隐藏的代码: Dim db = new MyDataContext Dim user = from u in db.Employees select IDNumber = u.IDNumber, _ FirstName = u.firstName, LastName = u.lastName, Tim

我想通过使用LINQ to SQL从ASP.NET中的TimeCheckIn中减去TimeCheckOut,在data 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>

在Helper函数的第3行中,Dim dif作为TimeSpan=DateTime.Now.Subtract(Duration),它只给出从TimeCheckIn到DateTime.Now的小时、分钟和秒的持续时间。但是,我希望从TimeCheckIn到TimeCheckOut的持续时间仅以小时、分钟和秒为单位。我知道FieldDisplayDuration函数的逻辑是完全错误的,但我只想让你明白我的观点,而且它可能是那些想要计算员工自雇佣日期起的持续时间的人的代码示例。最后,让我们回到TimeSpan,在gridview问题中从TimeCheckIn中减去TimeCheckOut,我该怎么做呢?请给我一些线索。。非常感谢您……

只需减去日期和时间即可获得时间跨度,这样您就可以使用

 Text='<%# FieldDisplayDuration(Eval("TimeCheckIn"), Eval("TimeCheckOut")) %>'
虽然我可能会在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)
然后,您只需要格式化生成的时间跨度

或者,您可以在select中完成所有操作,甚至可以调用函数,因此可以使用类似

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


如果您这样做了,并且假设FormatDuration返回了一个字符串,那么您就可以完全取消列模板了

非常感谢您的提示。
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)\