我有一个带有表(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
似乎没有为'days'分配任何值。我检查了表格,那里有有效的记录,所以我认为我的代码是错误的。如果这很模糊或者我没有提供足够的信息,我很抱歉,我对此很新。
答案 0 :(得分:1)
您正在代码
中创建新的本地变量days
Dim days = (From Beko In dc.Bekos _
而不是将查询结果分配给类变量days
。因此,Nothing
方法中的天为calBeko_DayRender
,您将获得例外。
您的代码应为
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()