3.7 Calendar控件
Calendar控件可以在Web页面上创建一个漂亮的多功能日历,用户可通过该日历导航到任意一年的任意一天。它提供了许多的属性供你选择,利用这些属性几乎可以改变这个控件的每个部分。当ASP.NET网页运行时,Calendar控件以HTML表格的形式呈现。下面的代码展示了一个简单的Calendar控件的设置,如下所示:
<asp:Calendar ID="Calendar1"BackColor="Blue"runat="server">
</asp:Calendar>
上面定义的Calendar控件除了能够在页面上显示出来之外,不具备其他任何功能。其实,它与其他服务器控件一样,也有自己的事件。可以通过对这些事件编写相关的处理程序来满足自己的需要。在这些事件中,最重要的就是OnSelectionChanged事件,该事件在每次用户单击Calendar控件里的某一日期时触发。例如,可以利用该事件为上面的例子添加一个日期选中并显示的功能,即将用户选择的日期数显示出来。代码如下所示:
<asp:Calendar ID="Calendar1"BackColor="Blue"runat="server"
OnSelectionChanged="Calendar1_SelectionChanged"></asp:Calendar>
OnSelectionChanged事件处理程序如下:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
Response.Write("你选择的日期是:"
+Calendar1.SelectedDate.ToLongDateString());
}
运行程序,单击页面的日期,运行结果如图3-4所示。
图 3-4 Calendar控件示例
注意 其实,用户和日历控件的每次交互都会引起一个回发,这允许立即响应OnSelectionChanged事件,并允许Calendar控件重新呈现它的界面以显示新的月份或者新的选定日期,该控件不使用AutoPostBack属性。
Calendar控件在客户端浏览器上呈现JavaScript。客户端浏览器必须启用了JavaScript,此控件才能正常运行。
在Calendar控件中,可以允许用户选择整周、整月或者单独的某一天,还可以呈现一个静态的不可选择的日历。但有一点要注意的是,如果允许按月选择,则用户还可以选择周或者天;如果允许按周选择,则用户还可以选择天。这些类型都可以通过设置SelectionMode属性来完成,还需要设置FirstDayOfWeek属性来配置如何选择一周。例如,将FirstDayOfWeek属性设置为枚举值Monday,那么就可以选择从周一到周日。
除此之外,还可以通过SelectedDates属性来同时选择多个日期。SelectedDates提供了一个所有选中日期的集合,你可以检查该集合。代码如下所示:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
string time=string.Empty;
foreach(DateTime dt in Calendar1.SelectedDates)
{
time+=dt.ToLongDateString();
}
}
在样式的设置方面,Calendar控件提供很多的样式属性供你选择。可以为Calendar控件的各个不同部分设置样式属性,从而自定义该控件的外观。Calendar控件的常用样式属性如表3-5所示。
与此同时,还可通过显示或隐藏Calendar控件的不同部分来控制该控件的外观。表3-6列出了Calendar控件中可显示或隐藏的各个部分。
尽管Calendar控件不支持绑定到数据源,但仍然可以修改各个日期单元格的内容和格式设置。在网页上显示Calendar控件之前,它将创建并装配构成该控件的组件。在创建Calendar控件中的每个日期单元格时,均会引发OnDayRender事件。通过在OnDayRender事件的事件处理程序中提供代码,可以在创建日期单元格时控制其内容和格式设置。如下面的代码所示:
protected void Calendar1_OnDayRender(
object sender,
DayRenderEventArgs e)
{
if(e.Day.IsWeekend)
{
e.Cell.BackColor=System.Drawing.Color.DarkGreen;
e.Day.IsSelectable=false;
}
}