Как отобразить только продолжительность: часы: минуты: секунды в Gridview Asp.Net с использованием LINQ to SQL? - PullRequest
1 голос
/ 18 мая 2009

Я хочу отображать только продолжительность, час, минуты и секунды в Gridview данных путем вычитания TimeCheckOut из TimeCheckIn в ASP.NET с использованием LINQ to SQL

Вот код:

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 в вспомогательной функции Dim dif имеет значение TimeSpan = DateTime.Now.Subtract (Duration), которое задает только продолжительность Hour, Minute и Second от TimeCheckIn до DateTime.Now. Однако я хочу, чтобы продолжительность от TimeCheckIn до TimeCheckOut была только в часах, минутах и ​​секундах. Я знаю, что функция FieldDisplayDuration - абсолютно неправильная логика, но я просто хочу, чтобы вы получили только мою точку зрения, а также это может быть пример кода для тех, кто хочет рассчитать продолжительность сотрудника с даты найма. Наконец, давайте вернемся к TimeSpan путем вычитания TimeCheckOut из TimeCheckIn в проблеме gridview. Как я могу это сделать? Пожалуйста, дайте мне понять ... Спасибо вам большое ...

Ответы [ 2 ]

0 голосов
/ 18 мая 2009

Вы можете поместить логику для вычисления продолжительности прямо в предложении 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)

или

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

Если вы сделали это и предполагаете, что FormatDuration возвращает строку, вы сможете полностью отказаться от шаблона столбца

0 голосов
/ 18 мая 2009

Можно просто вычесть дату и время, чтобы получить интервал времени, чтобы вы могли использовать

 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

Хотя я, вероятно, использовал бы строковый формат в строке возврата и сделал бы это ...

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

Как мне кажется, читать легче.

...