用C#在MonthCalendar中突出显示大量日期

时间:2012-09-04 10:13:19

标签: c# exception-handling

我需要根据从数据库中获取的数据突出显示MonthCalendar中的日期,但它会不断地向我抛出OutOfMemory异常。我得到了我必须在数据库中强调的日子,像这样的bool值:

command.CommandText = "SELECT Monday FROM Days WHERE Event = "+idEvent+"";
Monday = Convert.ToBoolean(command.ExecuteScalar());

类似的代码用于一周中的每一天。我必须突出显示日期的范围是整年(开始和结束是一年中的第一天和最后一天,都是DateTime类型)。我试着用这段代码来做:

for (DateTime day = start; day < end; day.AddDays(1))
            {
                if (Monday && day.DayOfWeek == DayOfWeek.Monday)
                {
                    dates.Add(day);
                }
                else if (Tuesday && day.DayOfWeek == DayOfWeek.Tuesday)
                {
                    dates.Add(day);
                }
                else if (Wednesday && day.DayOfWeek == DayOfWeek.Wednesday)
                {
                    dates.Add(day);
                }
                else if (Thursday && day.DayOfWeek == DayOfWeek.Thursday)
                {
                    dates.Add(day);
                }
                else if (Friday && day.DayOfWeek == DayOfWeek.Friday)
                {
                    dates.Add(day);
                }
                else if (Saturday && day.DayOfWeek == DayOfWeek.Saturday)
                {
                    dates.Add(day);
                }
                else if (Sunday && day.DayOfWeek == DayOfWeek.Sunday)
                {
                    dates.Add(day);
                }
            }
            monthCalendar1.BoldedDates = dates.ToArray();

此算法的重点是加粗所选事件发生的日期(每个事件全年定期发生,但有一些例外,例如假期或某些特定时间间隔)。因此,对于每个事件,每年可能发生超过200次事件。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

一个可能的原因是您的迭代代码有问题,因为day.AddDays(1)无法正常运行。它返回一个新的DateTime,操作已经完成。

因此day的值永远不会改变,你的循环无限运行。

改为使用while循环:

DateTime day = start;
while (day < end)
{
    // your date checking logic

    day = day.AddDays(1);
}