Calendar控件问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 15:18:35
string[,] AllHolidays = new string[13, 32];
void Page_load(object obj, EventArgs e)
{
AllHolidays[1,1] = "元旦";
AllHolidays[1,28] = "除夕";
AllHolidays[1,29] = "春节";
AllHolidays[4,5] = "清明节";
AllHolidays[5,1] = "劳动节";
AllHolidays[5, 31] = "端午节";
AllHolidays[10,1] = "国庆节";
AllHolidays[10,6] = "中秋节";
}
void Holidays(object obj, DayRenderEventArgs e)
{
if (AllHolidays[e.Day.Date.Month, e.Day.Date.Day] != "")
e.Cell.Controls.Add(new LiteralControl("<br/><font size=1>"+AllHolidays[e.Day.Date.Month,e.Day.Date.Day]+"</font>"));
}
各路高手,if (AllHolidays[e.Day.Date.Month, e.Day.Date.Day] != "")
这句是判断日期是否为设置的节日,可我不了解,他是怎么遍历月和天的,难道是e.Day.Date.Month这句是遍历了1-12,e.Day.Date.

同意楼上意见。
void Holidays(object obj, DayRenderEventArgs e)
这个事件是当为 Calendar 控件在控件层次结构中创建每一天时发生。 也就是说Calendar在呈现时,它会根据当时系统的时间来创建本月的每一个(每一天放到一个单元格),当第一天创建时,执行一次void Holidays(object obj, DayRenderEventArgs e)这个事件处理,对比二维数组AllHolidays[e.Day.Date.Month, e.Day.Date.Day] 比如当天是1月1日,则AllHolidays[1, 1] 那么当天就是元旦。然后程序继续创建第二天,又一次执行了void Holidays(object obj, DayRenderEventArgs e)这个事件处理,依次类推创建完一个月的显示。当你单击下一个月时,Calender控件也一样的重新创建每一天,然后又执行了要显示的天数次 void Holidays(object obj, DayRenderEventArgs e)事件。
这样讲你明白了吧?
DayRender事件是Calender呈现时执行了42次(显示6行7列),每次参数e都包含当天的数据,而不是遍历了月和日。

你的理解有些错误,
DayRenderEventArgs的Day属性表示正在 Calendar 中呈现的日期
e.Day.Date.Month是获取Calendar控件当前的月份,同理e.Day.Date.Day
所以该if (AllHolidays[e.Day.Date.Month, e.Day.Date.Day] != "")
语句只是将当前的时间取出放在二维数组与节日进行对比,而非遍历日期。

希望我所说的能对你有所帮助。

遍历应该在 void Holidays(object obj, DayRenderEventArgs e)的外面,Holidays只是判断是不是/是什么节日

不存在遍历,是通过下标的形式直接取值
我们可以把AllHolidays看作一个Table
AllHoliday