0

日付列に基づいて次の順序でグリッド内の行にフラグを立てようとしています

  • 今日から2日以上経過するとRED
  • 生後1日で黄色
  • 生後0日になるとGREEN
  • 日付が未来の場合はBLUE

BLUEではなくGREENである将来の日付を除いて、正常に機能している次のものがあります。

 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
4

3 に答える 3

2

.Daysは常に整数値を提供するため、少なくとも24時間先になるまで機能しません。自分で提案したとおりに解決するか、タイムスパンの違いをすぐに処理することができます。

また、この違いの意味を検討することもできます。2日経過したということは、48時間前に作成された要素を選択することを意味しますか、それとも、たとえば11月10日に作成されたすべてのエントリを意味しますか。

于 2010-11-12T20:42:40.233 に答える
1

私は解決策を見つけました。

最初に、Date.Compareを使用してCASEをIFでラップし、日付が将来かどうかを最初に確認します。

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
于 2010-11-12T20:31:45.883 に答える
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になります。

于 2010-11-12T20:36:55.250 に答える