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

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()
于 2013-04-11T11:21:34.827 回答