Comment afficher Durée seulement Heures: Minutes: Deuxième Gridview Asp.Net en utilisant LINQ to SQL?

StackOverflow https://stackoverflow.com/questions/876090

Question

Je veux afficher la durée seulement Heures, minutes, et en second Gridview de données par Soustraire TimeCheckOut de TimeCheckIn dans ASP.NET à l'aide LINQ to SQL

Voici le code derrière:

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

Code de la page:

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

Voici mon aide pour 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

En ligne 3 en fonction d'assistance, comme cultés Dim TimeSpan = DateTime.Now.Subtract (Durée) qui donnent seulement la durée des heures, minutes et deuxième de TimeCheckIn jusqu'à DateTime.Now. Cependant, je veux avoir la durée de TimeCheckIn jusqu'à TimeCheckOut seulement en heure, minute et seconde. Je sais que la fonction FieldDisplayDuration est logique tout à fait tort, mais je veux juste vous mon point seulement, et aussi il pourrait être l'exemple de code pour ceux qui veulent calculer la durée de l'employé de la date d'embauche. Enfin, Revenons à TimeSpan par Soustraire TimeCheckOut de TimeCheckIn dans le problème gridview, Comment puis-je faire cela? S'il vous plaît me donner quelques indices .. Merci tellement vous ...

Était-ce utile?

La solution

Il est possible de soustraire juste la date et l'heure pour obtenir le Timespan donc vous devriez être en mesure d'utiliser

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

et quelque chose comme cette fonction:

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

Bien que je serais probablement utiliser un format de chaîne sur la ligne Rturn et faire ...

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

Je pense qu'il est plus facile à lire.

Autres conseils

Vous pouvez mettre la logique pour calculer le droit de durée dans votre clause Select, comme suit:

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)

, il vous suffit ensuite de formater la Timespan résultant.

Sinon, vous pouvez tout faire dans la sélection, ou même appeler une fonction, donc quelque chose comme

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

ou

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

Si vous avez fait cela, et en supposant FormatDuration retourné une chaîne, vous seriez en mesure de faire disparaître le modèle de colonne entièrement

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top