我正在尝试根据日期列
按以下顺序标记网格中的行我有以下工作正常,除了将来的日期是绿色而不是蓝色。
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
答案 0 :(得分:2)
.Days总是给出一个Integer值,因此在你至少24小时后它才会起作用。您可以按照自己的建议解决问题,也可以立即使用Timespan差异进行解决。
您也可能想要考虑这种差异的含义。 2天是否意味着您要选择48小时前创建的元素,或者它是否意味着11月10日所有条目。
答案 1 :(得分:1)
我找到了解决方案。
我首先使用Date.Compare用IF包装我的CASE,首先检查日期是否在将来。
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
答案 2 :(得分:1)
我可能会建议另一种编写代码的方法:
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
正如我在最初的评论中所提到的,除非你将来至少24小时,否则Days将返回0。因此,如果是2010/08/15 12:30:00,您的未来日期是2010/08/16 0:30:00,则TimeSpan为-00:12:00:00等,天数为0。