我需要根据从数据库中获取的数据突出显示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次事件。我该如何解决这个问题?
答案 0 :(得分:1)
一个可能的原因是您的迭代代码有问题,因为day.AddDays(1)
无法正常运行。它返回一个新的DateTime
,操作已经完成。
因此day
的值永远不会改变,你的循环无限运行。
改为使用while循环:
DateTime day = start;
while (day < end)
{
// your date checking logic
day = day.AddDays(1);
}