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