2009-05-18 9 views
1

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 SQLComment afficher Durée seulement Heures: Minutes: Deuxième dans Gridview Asp.Net en utilisant 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 à 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 

Dans ligne 3 dans la fonction d'assistance, Dim dif comme TimeSpan = DateTime.Now.Subtract (Durée) qui donne uniquement la durée de Heure, Minute et Deuxième de TimeCheckIn jusqu'à DateTime.Now. Cependant, je veux avoir la durée de TimeCheckIn jusqu'à TimeCheckOut seulement en heure, minutes et secondes. Je sais que la fonction FieldDisplayDuration est totalement fausse logique, mais je veux juste que vous obteniez mon point seulement, et aussi cela pourrait être l'échantillon de code pour ceux qui veulent calculer la durée de l'employé à partir de la date d'embauche. Enfin, revenons à TimeSpan en soustrayant 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 ...

Répondre

0

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 ça 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) 

Comme je pense que c'est plus facile à lire.

+0

Merci beaucoup. Il fonctionne si doux ... – Vicheanak

0

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

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) 

Ensuite, il vous suffit de formater le 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 à supposer que FormatDuration retourné un chaîne, vous seriez en mesure de faire disparaître entièrement le modèle de colonne

+0

Vraiment apprécier pour votre idée. – Vicheanak

Questions connexes