接着需要响应日历上的日期选择。为此,需要先为日历的SelectionChanged事件添加一个事件处理程序,强制检查现有会议的日期。双击设计器中的日历,添加如下代码: private void calendar_SelectionChanged(object sender, System.EventArgs e) { System.DateTime trialDate = calendar.SelectedDate; calendar.SelectedDate = getFreeDate(trialDate); }
这段代码与Page_Load()相同。
执行这种检查的第三个地方是响应登记按钮的单击。后面会解释它,因为后面进行了许多改变。
接着把日历的日期单元格变为另一种颜色,以表示现存的会议。为此,需要给日期对象的DayRender事件添加一个事件处理程序。每次显示一个日期时,都会触发这个事件,并允许通过在处理程序中接收到的DayRenderEventArgs参数的Cell 和 Date属性,访问要显示的单元格对象和这个单元格的日期。我们需要比较要显示的单元格中的日期和eventTable对象中的日期,如果匹配,就可以使用Cell.BackColor属性为单元格着色: protected void calendar_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e) { if (eventTable.Rows.Count > 0) { System.DateTime testDate; foreach (System.Data.DataRow testRow in eventTable.Rows) { testDate = (System.DateTime)testRow["EventDate"]; if (testDate.Date == e.Day.Date) { e.Cell.BackColor = Color.Red; } } } }
这里使用红色,得到屏幕图25-6。三月的15、27、28、29和30日都有会议,所以用户选择了17日。
 图 25-6
添加了日期选择逻辑后,就不可能选择显示为红色的一天,如果要选择这样的日期,就会选择该日期后面的某一天。例如,在图25-6的日历中单击3月28日,就会选择31日。 |