Question

Je suis en train de baliser les lignes dans une grille dans l'ordre suivant basé sur une colonne de date

  • Lorsque 2 ou plusieurs jours à partir d'aujourd'hui puis rouge
  • Lorsque 1 jour puis JAUNE
  • Lorsque 0 jours puis vert
  • Lorsque la date est dans l'avenir, alors BLEU

J'ai le suivant qui fonctionne bien, sauf pour les dates futures qui sont de couleur verte au lieu de bleu.

 Dim myDate As DateTime = CType(grdSummaryView.GetRowCellValue(e.RowHandle, "myDate"), DateTime)

 Select Case Now.Subtract(myDate).Days
                '2 or more days old then RED FLAG
                Case Is >= 2
                    e.Value = ImageCollection2.Images(3)
                Case 1
                '1 day old then YELLOW FLAG
                    e.Value = ImageCollection2.Images(1)
                Case 0
                'Current day then GREEN FLAG
                    e.Value = ImageCollection2.Images(0)
                Case Else
                    e.Value = ImageCollection2.Images(4)
 End Select
Était-ce utile?

La solution

Je pourrais suggérer une autre façon d'écrire le code:

Dim age As Double = Now.Substract(myDate).TotalDays

If age >= 2 Then
  e.Value = ImageCollection2.Images(3) //Red
ElseIf age >= 1 Then
  e.Value = ImageCollection2.Images(1) //Yellow
ElseIf age >= 0 Then
  e.Value = ImageCollection2.Images(0) //Green
Else
  e.Value = ImageCollection2.Images(4) //Blue
End If

Comme mentionné dans mes observations initiales, jours reviendront 0 à moins que vous êtes au moins 24 heures à l'avenir. Donc, s'il est 2010/08/15 12:30:00 et votre date future est 2010/08/16 0:30:00 alors le TimeSpan est -00: 12: 00:. 00 etc et jours seront 0

Autres conseils

Les .jours donne toujours une valeur Integer il ne fonctionnera pas jusqu'à ce que vous êtes au moins 24 heures dans l'avenir. Vous pouvez le résoudre comme vous suggérez ou travailler immédiatement avec la différence Timespan.

Vous pouvez également considérer la signification de cette différence. Est-ce que 2 jours signifie que vous souhaitez sélectionner des éléments qui ont été créés il y a 48 heures ou que cela signifie toutes les inscriptions faites le 10 Novembre par exemple.

J'ai trouvé une solution.

Je première enveloppe mon cas avec un IF en utilisant Date.Compare d'abord vérifier si la date est à l'avenir.

If Date.Compare(myDate, Now) < 0 Then
                Select Case Now.Subtract(delivDate).Days

                    Case Is >= 2
                        '2 or more days old then RED FLAG
                        e.Value = ImageCollection2.Images(3)
                    Case 1
                        '1 day old then YELLOW FLAG
                        e.Value = ImageCollection2.Images(1)
                    Case Else
                        '0 day (current day) then GREEN FLAG
                        e.Value = ImageCollection2.Images(0)
                End Select
            Else
                'DATE IS IN THE FUTURE
                e.Value = ImageCollection2.Images(4)
            End If
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top