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所示。

figure_0121_0082

图 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所示。

figure_0122_0083

与此同时,还可通过显示或隐藏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;

}

}


figure_0123_0084