Pergunta

Eu quero mostrar a duração única horas, minutos, e Segundo em dados Gridview por Subtrair TimeCheckOut de TimeCheckIn em ASP.NET usando LINQ to SQL

Aqui está o código por trás:

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()

código na página:

  <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>

Aqui está o meu ajudante para 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

Na linha 3 na função de ajudante, Dim dif como TimeSpan = DateTime.Now.Subtract (Duração) que dão apenas a duração de hora, minuto e segundo da TimeCheckIn até DateTime.Now. No entanto, eu quero ter a duração de TimeCheckIn até TimeCheckOut apenas em hora, minuto e segundo. Eu sei que a função FieldDisplayDuration é lógica totalmente errado, mas eu só quero que você obter apenas o meu ponto, e também poderia ser o exemplo de código para aqueles que querem calcular a duração do empregado a partir da data de aluguer. Finalmente, Vamos voltar para TimeSpan por Subtrair TimeCheckOut de TimeCheckIn no problema gridview, Como posso fazer isso? Por favor me dê alguma pista .. Obrigado tanto ...

Foi útil?

Solução

É possível apenas subtrair a data e hora para obter o Timespan por isso você deve ser capaz de usar

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

e algo como esta função:

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

Embora eu provavelmente usaria um formato de cadeia na linha rturn e fazer isso ...

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

Como eu acho que é mais fácil de ler.

Outras dicas

Você pode colocar a lógica para calcular o direito de duração em seu Select cláusula, assim:

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)

Em seguida, você só precisa formatar o Timespan resultante.

Como alternativa, você pode fazer tudo na seleção, ou mesmo chamar uma função, por isso, tem algo parecido

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

ou

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

Se você fez isso, e assumindo FormatDuration retornado uma string, você seria capaz de acabar com o modelo da coluna inteiramente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top