2013-02-20 5 views
2

Je voudrais changer la couleur d'arrière-plan sur ma grille en fonction de la date actuelle. Le code ci-dessous fonctionne, mais la date future qui sera coloriée en bleu commence deux jours plus tard au lieu de 1 jour qui est demain. Ai-je manqué quelque chose dans le code ou devrait-il être modifié différemment? . Gridview Changer la couleur de fond basée sur la date

If e.Row.RowType = DataControlRowType.DataRow Then 
        Dim data As DateTime = Convert.ToDateTime(DirectCast(e.Row.DataItem, DataRowView)("Date").ToString()) 
        Dim diff As TimeSpan 
        diff = DateTime.Now.Subtract(data) 
        Dim days As Integer = diff.Days 
        'Yellow = past date/White = current date/Blue = future date 
        If days > 0 Then 
         e.Row.BackColor = Drawing.ColorTranslator.FromHtml("#FFFFBB") 'past date' 
        ElseIf days < 0 Then 
         e.Row.BackColor = Drawing.ColorTranslator.FromHtml("#BAD8FF") 'future date' 
        ElseIf days = 0 Then 'present date 
         'do nothing 
        End If 
       End If

Répondre

1

Vous pouvez utiliser la propriété Date de DateTime qui tronque le temps:

Dim data = DirectCast(e.Row.DataItem, DataRowView) 
Dim day As Date = data.Row.Field(Of Date)("Date").Date 
Dim daysDiff As Int32 = (Now.Date - day).Days 
+0

Merci pour votre réponse. J'ai appliqué votre suggestion dans mon code, mais j'ai reçu une erreur sur "Dim jour en tant que Date = data.Row.Field (Of Date) (" Date "). Date" message d'erreur "System.InvalidCastException: la distribution spécifiée n'est pas valide. ? –

+0

J'ai résolu le problème en utilisant votre suggestion J'ai modifié le code pour 'Dim data As DateTime = Convert.ToDateTime (DirectCast (e.Row.DataItem, DataRowView) (" Date "). ToString()) Dim jour As Date = data.Date Dim joursDiff Comme Int32 = (Now.Date - jour) .Days', qui n'a produit aucune erreur et la date de demain est maintenant surlignée en bleu.Est-ce que je dois l'écrire différemment ou le laisser tel quel, car cela fonctionne? –

+0

@g_shockTan : Pourquoi convertissez-vous votre date-champ à la chaîne et puis retour à 'Date', qui est inefficace et peut causer des problèmes de localisation.Est-ce que vous stockez la date comme chaîne? –

Questions connexes