C#日历控件的定制步骤

开发 后端
本文介绍C#日历控件的定制步骤,一下方法接受一个试用日期作为参数,并返回要使用的日期,该日期与试用日期相同,也可以是试用日期之后的某个日期。

定制C#日历控件

在把会议添加到数据库中之前,先修改一下日历的显示。***用另一种颜色显示登记之前的日期,以防该日期被选中。这要求修改我们在日历中设置日期的方式,以及日期单元格的显示方式。

首先是日期选择。有3个地方需要查看会议登记的日期,并修改相应选择:一是在Page_ Load()中设置初始日期时,第二是在用户试图从日历中选择日期时,第三情况是登记一个会议,并设置一个新的日期,以防用户在选择新日期前,在同一天连续登记两个会议。这些都是很常见的情况,也可以创建一个私有方法来执行这个计算。这个方法应接受一个试用日期作为参数,并返回要使用的日期,该日期与试用日期相同,也可以是试用日期之后的某个日期。

把这个getFreeDate()方法添加到后台编码文件中:

  1. private System.DateTime getFreeDate(System.DateTime trialDate){  
  2. if (eventTable.Rows.Count >0){  
  3. System.DateTime testDate;  
  4. bool trialDateOK = false;  
  5. while (!trialDateOK){  
  6. trialDateOK = true;  
  7. foreach (System.Data.DataRow testRow in eventTable.Rows){  
  8. testDate = (System.DateTime)testRow["EventDate"];  
  9. if (testDate.Date == trialDate.Date){  
  10. trialDateOK = false;  
  11. trialDatetrialDate = trialDate.AddDays(1);  
  12. }  
  13. }  
  14. }  
  15. }  
  16. return trialDate;  

这段简单的代码使用在Page_Load()中填充的对象eventTable提取会议数据。首先看看一般情况:没有登记任何会议,此时返回该试用日期,以确认该日期,接着对Event表中的日期进行迭代,把该日期与试用日期比较。如果找到一个匹配,就给试用日期加一天,执行另一次搜索。

从DataTable中提取数据是相当简单的:testDate = (System.DateTime)testRow["EventDate"];

把列数据转换为Sytem.DateTime,这样会更精确。

使用getFreeDate()的***个地方是在Page_Load()后面。这意味只需对设置SelectedDate属性的代码稍加修改:

  1. if (!this.IsPostBack){  
  2. System.DateTime trialDate = System.DateTime.Now;  
  3. calendar.SelectedDate = getFreeDate(trialDate);  
  4. this.DataBind();  

接着需要响应日历上的日期选择。为此,需要先为日历的SelectionChanged事件添加一个事件处理程序,强制检查现有会议的日期。双击设计器中的C#日历控件,添加如下代码:

  1. private void calendar_SelectionChanged(object sender  
  2. System.EventArgs e){  
  3. System.DateTime trialDate = calendar.SelectedDate;  
  4. calendar.SelectedDate = getFreeDate(trialDate);  

这段代码与Page_Load()相同。

执行这种检查的第三个地方是响应登记按钮的单击。后面会解释它,因为后面进行了许多改变。

接着把日历的日期单元格变为另一种颜色,以表示现存的会议。为此,需要给日期对象的DayRender事件添加一个事件处理程序。每次显示一个日期时,都会触发这个事件,并允许通过在处理程序中接收到的DayRenderEventArgs参数的Cell 和 Date属性,访问要显示的单元格对象和这个单元格的日期。我们需要比较要显示的单元格中的日期和eventTable对象中的日期,如果匹配,就可以使用Cell.BackColor属性为单元格着色:

  1. protected void calendar_DayRender(object sender,  
  2. System.Web.UI.WebControls.DayRenderEventArgs e){  
  3. if (eventTable.Rows.Count >0){  
  4. System.DateTime testDate;  
  5. foreach (System.Data.DataRow testRow in eventTable.Rows){  
  6. testDate = (System.DateTime)testRow["EventDate"];  
  7. if (testDate.Date == e.Day.Date){  
  8. e.Cell.BackColor = Color.Red;  
  9. }  
  10. }  
  11. }  

以上介绍定制C#日历控件

【编辑推荐】

  1. C#数据库查询和操作大全
  2. 浅析C#扩展方法
  3. C# Singleton的使用及优缺点探讨
  4. 详细分析C#数据库连接池
  5. C#数据库备份及还原的实现代码
责任编辑:佚名 来源: IT168
相关推荐

2009-08-03 13:43:02

C#日历控件

2009-08-26 17:56:20

C#制做Active控

2009-08-04 13:23:40

C# 自定义控件dll

2011-05-20 16:07:29

C#

2009-08-19 11:21:02

C# ListBox控

2009-08-24 11:23:41

C# TimeLabe

2009-08-11 14:45:41

C# DataGrid

2009-08-18 17:41:22

C# ListView

2009-08-26 17:28:48

C# DateTime

2016-03-14 10:20:41

日历动画Android源码

2009-08-19 15:30:40

C#复合控件构建

2009-08-06 16:58:40

C#编写ActiveX

2009-08-21 15:27:11

C# DataGrid

2009-09-04 17:58:38

C# Web Brow

2009-08-12 10:35:50

C#调用ActiveX

2009-08-21 17:55:52

C#复合控件

2009-08-28 15:05:35

C#编写Calenda

2009-08-24 10:10:09

C#复合控件

2009-08-14 14:19:50

Enhanced LiC#构建

2009-08-24 18:21:23

C# ListView
点赞
收藏

51CTO技术栈公众号