1

テーブル (Beko) を持つ SQL DB があります。各レコードには、作成された日付の (データ型が日付の) 日付スタンプが含まれています。レコードが存在する各日が強調表示されるように、カレンダー コントロール (calBeko) を設定しようとしています。

レコードを含む日を保持するために、ページ クラスで次のように宣言しました。

Private days As IEnumerable(Of DateTime) = Nothing

次に、Page_PreRender イベントで次を使用して、レコードを含む日の配列を作成します。

Dim startDate, endDate, baseDate As DateTime

    If calBeko.VisibleDate.Year <> 1 Then
        baseDate = calBeko.VisibleDate
    Else
        baseDate = DateTime.Now
    End If

    startDate = New DateTime(baseDate.Year, baseDate.Month, 1)
    endDate = startDate.AddMonths(1).AddDays(-1)

    Dim dc As New BekoDataContext
    Dim days = (From Beko In dc.Bekos _
               Where Beko.DateStamp <= endDate And _
               Beko.DateStamp >= startDate _
               Order By Beko.DateStamp _
               Select New DateTime(Beko.DateStamp.Year, _
                                   Beko.DateStamp.Month, _
                                   Beko.DateStamp.Day) Distinct).ToArray()

次に、calBeko_DayRender イベントを使用して、レコードが存在する日を強調表示します。

For Each d In days
        If d.Day = e.Day.Date.Day AndAlso _
            d.Month = e.Day.Date.Month Then
            e.Cell.CssClass = "ajax_calendar_checkday"
            Exit For
        End If
    Next

問題は、ページを実行すると、次の行で System.NullReferenceException が発生することです。

For Each d In days

「日」に値が割り当てられていないようです。テーブルを確認したところ、そこに有効なレコードがあるため、コードが間違っていると思います。これが曖昧であるか、十分な情報を提供していない場合はお詫び申し上げます。私はこれに非常に慣れていません。

4

1 に答える 1