0

データベースから取得したデータに応じて MonthCalendar の日付を強調表示する必要がありますが、OutOfMemory 例外がスローされ続けます。次のようなブール値としてデータベースから強調表示する必要がある日を取得します。

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

曜日ごとに同様のコードが使用されます。日付を強調表示する必要がある範囲は、1 年全体です (開始日と終了日は、どちらも 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();

このアルゴリズムのポイントは、選択したイベントが発生する日付を太字にすることです (すべてのイベントは、休日や特定の時間間隔などのいくつかの例外を除いて、年間を通じて定期的に発生します)。したがって、イベントごとに、1 年に 200 回以上発生する可能性があります。どうすればこの問題を解決できますか?

4

1 に答える 1

1

考えられる理由の 1 つは、反復コードに欠陥があり、適切にday.AddDays(1)動作しないことです。DateTime操作が行われた新しいを返します。

したがって、値はday決して変化せず、ループは無限に実行されます。

代わりに while ループを使用します。

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

    day = day.AddDays(1);
}
于 2012-09-04T10:24:31.037 に答える