Calendar控件之DayRender事件_calendar1_dayrender_St0ne82的博客-程序员秘密

技术标签: calendar  getter  string  equals  ASP.NET  setter  object  

Calendar控件之DayRender事件

 

   DayRenderCalendar控件的一个相对重要的事件.它可以用来在Calendar控件中所有日期的长相”.这个事件使用了一个DayRenderEventArgs对象作为其参数.后者则包括两个属性:CellDay.MSDN,对于这两个属性有如下的描述:

 

属性

说明

Cell

获取表示呈现在 Calendar 控件中的单元格的 TableCell 对象

Day

获取表示呈现在 Calendar 控件中的日期的 CalendarDay

  下面运用它们来完成一些操作:

1).隐去Calendar控件中的非指定月的日期

以当前时间为例,即将月指定为DateTime.Now.Month.首先将Calendar控件的VisibleDate属性设置为DateTime.Now,然后再书写Calendar控件的DayRender事件,一种可能的书写方式如下:

 

/*Step1: Page_Load中设置Calendar控件的VisibleDate属性,或是通过IDE来设置,亦或是手动编写.aspx来完成*/

 

/*Step2: 撰写DayRender事件的处理*/

 

//声明一个变量,用来保存当前显示的月份

private int intCurrentMonth = DateTime.Now.Month;

private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e){

if(e.Day.Date.Month != intMonth) //如果不是指定的月份

         e.Cell.Text = "";              //将对应的TableCell对象的Text属性设置为””

}

 

这段代码可以很好地工作.运行后我们可以看到诸如下图的结果:

 

但是,如果Calendar控件上如果NextMonthText,PrevMonthText属性不为””的话,当点击它们的时候,由于前面的控制逻辑,可能会得不到期望的结果.比如:

2004-12

2005-1

 

而期望的结果是:

2004-12

2005-1

为了得到这个效果,我们可以使用Calendar控件的另一个事件PreRender.在这个事件中将变量intMonth设置为Calendar.VisibleDate.Month即可:

 

private void Calendar1_PreRender(object sender, System.EventArgs e){

    this.intMonth = this.Calendar1.VisibleDate.Month;

}

 

2)为特定的日期添加备注

为了完成对指定日期添加备注,可以首先抽象出一个class,比如DateMemo,用来记录对应某个日期的备注.具体来说,如下:

internal class DateMemo{

private DateTime dt;            //日期

       private string memo;            //对应备注

       //构造函数

public DateMemo(DateTime dt,string memo){

         this.dt = dt;

         this.memo = memo;

       }

//提供属性

public string Memo{

         get{

           return this.memo;      

         }

         set{

               this.memo = value;

         }

       }

 

public DateTime Date{

         get{

           return this.dt;

          }//Only getter, no setter

       }

};

 

//这个类并不完善,还可以覆写Equals,GetHashCode等基类方法

 

下面需要一个容器来存放需要添加备注的那些日期.当然,由于有了DateMemo,这个容器用来存储的对象就是DateMemo对象了.这里采用最简单的容器数组,即是DateMemo[]. 现在面临的一个问题是:从哪里获取这些DateMemo对象呢?其实,数据源是不拘的,从文件,数据库中提取都没有问题.为了突出主题,这里在程序中写死”:

private DateMemo[] data;           //存放DateMemo的数组

private string[] memo;              //日期的备注

 

private void Page_Load(object sender, System.EventArgs e){

if(!this.IsPostBack){ //首次加载

   this.Calendar1.VisibleDate = DateTime.Now;

          memo = new string[]{

                                            "Database exam",

                                      "Accomplish the book",

                                      "Body building",

                                      "Do Research work on neural network",

                                      "Having a face-to-face with English teacher",

                                           };

      //构建DateMemo数组,可以从其它数据源中加载,如此的话,可能不会使用到memo数组,请根据实际情况来完成加载

         data = new DateMemo[memo.Length];

         for(int i = 0; i < data.Length; i++)

               data[i] = new DateMemo(DateTime.Now.AddDays(i * 2),memo[i]);

         //DateTime.Now开始的连续data.Length个间隔为2天的日期设置为需要为其添加备注的日期

        }

}

 

//DayRender事件

private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e){

       /* 如果期望只显示当前月的日期,采用1)中的方法

    if(e.Day.Date.Month != intMonth)

                            e.Cell.Text = "";

       else {

*/

 // SpecialDayIndex是一个辅助函数,用来判断参数是否是一个需要添加备注的日期

        int index = this.SpecialDayIndex(e.Day.Date);

          if(index >= 0){

         //如果是需要添加备注的日期

         //在这里完成备注的添加动作

               e.Cell.BackColor = Color.FromName("Coral"); //设置Cell的背景色

               e.Cell.ToolTip = this.data[index].Memo;      //设置CellToolTip

     }

       /*

}

*/

}

 

其中, SpecialDayIndex的实现为:

//判断参数是否是一个需要添加备注的日期

//返回值:    -1     表示参数不是一个需要添加备注的日期

//       非负整数  表示参数是一个需要添加备注的日期,返回值为参数在data中的序号  

private int SpecialDayIndex(DateTime dt){

if(this.data == null) return -1;

int index = 0;

       foreach(DateMemo dm in this.data){

         if((dt.Year == dm.Date.Year) && (dt.Month == dm.Date.Month) && (dt.Day == dm.Date.Day)) //这里需要自己判断,不能使用(dt == dm.Date)或是(dt.Equals(dm.Date))

         return index;

        index++;

       }

return -1;

}

程序运行的一个结果如下:

 

    

其中,DateTime.Now2004-11-4,当把光标放在2004-11-8上时,显示了其对应的ToolTip.你可以设置其他属性.

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/St0ne82/article/details/167728

智能推荐

OpenPLC:符合IEC 61131-3标准的用于网络安全研究的开源工业控制器_codelxy的博客-程序员秘密

OpenPLC: An IEC 61,131–3 compliant open source industrial controller for cyber security research【翻译】摘要在过去的十年中,多次网络攻击成功地破坏了SCADA系统和plc的正常运行。为了对付这些攻击,研究人员已经努力寻找能够保护网络和可编程逻辑控制器的防御机制。然而,由于供应商不提供有关其设备硬件...

JS获取浏览器flash player版本信息_普通网友的博客-程序员秘密

JS获取浏览器flash player版本信息swfobject_1_5_test×××1、是否是最新版本&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&...

DRF序列化和反序列化_drf 序列化和反序列化_wtl175的博客-程序员秘密

声明序列化器先声明对象from datetime import datetimeclass Comment(object): def __init__(self, email, content, created=None): self.email = email self.content = content self.created = created or datetime.now()comment = Comment(email='le

[报错]TypeError [ERR_INVALID_CALLBACK]: Callback must be a function_城南蝈蝈的博客-程序员秘密

[报错]TypeError [ERR_INVALID_CALLBACK]: Callback must be a function原文链接:https://www.longkui.site/development/node2/

sql查询语句详解_sql查询语句大全讲解_ZikM_0221的博客-程序员秘密

SQL查询语句详解(一)一、基本语法Select select_listFrom table_nameWhere condition_expressionGroup by group_columns having condition_expressionOrder by sort_columns二、查询实例查询所有字段查询指定字段用DISTINCT去除结果中的重复行查询指定数据带有in关键字的查询带between and的范围查询带like的字符匹配查询表1

Redis秒杀实战:微信抢红包(附源码)_Java团长在csdn的博客-程序员秘密

为啥写这个微信抢红包项目呢,公司 0202 年 08 月 22 日,公司周年庆,抢了100多红包????,O(∩_∩)O哈哈~业务流程分析功能拆解新建红包在 DB、Redis 分别新增一...

随便推点

首届“中湘吉法律成才奖励基金”捐赠暨颁奖仪式在吉首大学举行_中湘吉成才视频_CMWSMI的博客-程序员秘密

本网讯 1月5日上午,尽管天气寒冷刺骨,可是吉首大学模拟法庭内却春意浓浓,首届“中湘吉法律成才奖励基金”捐赠暨颁奖仪式在此盛大举行。图为:湘西现场新华云直播平台对仪式全程进行现场视频、图文直播湘西州司法局党组书记、局长、二级巡视员欧道胜,吉首大学教育发展基金会理事长李荣光,吉首大学法学与公共管理学院党委书记彭献忠、院长吴文平,湘西州律师协会会长杨志远,湖南中湘吉律师事务所创始人、高级合伙人、吉首大学法学与公共管理学院(以下称吉首大学法管学院)08届优秀毕业生王亚东及湖南中湘吉律师事务所高级合伙人

JIRA项目管理系统源代码免费下载_jira 源码_justwaityou1314的博客-程序员秘密

老版本链接:https://pan.baidu.com/s/1XnPVwjsyBXMxk7Ggnr8SYw提取码:520y新版本链接:https://pan.baidu.com/s/11zNt1FzovZgf267SP4LWCg提取码:520y使用JAVA语言写的项目管理软件,可以跟踪任务和bug的进度,实现对任务和bug全生命周期管理。安装说明使用方法如下:首先下载并安装JavaSDK,最新版和老版本都行,代码兼容性很好下载并安装MySQL数据库 - 密码同时要配置在database.

WPF中制作立体效果的文字或LOGO图形_大可山人的博客-程序员秘密

较久之前,我曾写过一篇:“WPF绘制党徽(立体效果,Cool) ”的博文。有感兴趣的朋友来EMAIL问是怎么制作的?本文解决此类问题。有时,为了美观的需要,我们可能需要在应用程序中制作一些看上去很酷的3D效果,比如下面的效果:这是一种立体的纯文字效果,或许你可以在网上找到相关工具自动生成图片,但如果是需要生成矢量的XAML图形文件,这样的工具少之又少。关于3D文字的问题,你可以参见大名鼎鼎的Cha

基于Android设备的Kali Linux渗透测试教程第1章渗透测试_大学霸_ITDaren的博客-程序员秘密

基于Android设备的Kali Linux渗透测试教程第1章渗透测试渗透测试(Penetration Testing)是一种通过模拟攻击者所采用的技术与方法,攻击目标系统的安全控制措施,并取得访问控制系统的安全测试方式。如果要进行渗透测试,必须有对应的工具。在Kali Linux中,集成了所有的渗透测试工具。本章将介绍渗透测试的基础知识,以及如何在各种设备上安装Kali Linux和远程连接

MSYS2使用笔记_星沉地动的博客-程序员秘密

MSYS2是一个体验非常好的linux模拟环境,可以移植大多数linux上面的程序,起源于cygwin。虽然官方网站也提供了安装包,一键安装,但是整个软件包太大了,我不太喜欢大而全的东西,更喜欢小而精的玩意。这里有一个非常好的镜像网站,http://mirrors.ustc.edu.cn/msys2/可以下载MSYS2的所有组件,以及所有版本,简直太好了。下载runtime + coreutil ...

推荐文章

热门文章

相关标签