为你的Blog打造个性日历控件

控件|日历

日历控件是dotnet自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少。纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发。

第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可。下图是我调整后的界面

属性设置如下:<asp:calendar id="Calendar1" CellPadding="2" Width="160px" TitleStyle-BackColor="#000000" BorderColor="#aaaaaa"
DayHeaderStyle-BackColor="#5e715e" OtherMonthDayStyle-ForeColor="#cccccc" DayNameFormat="Full"
runat="server" TitleStyle-ForeColor="#ffffff" NextPrevStyle-ForeColor="#ffffff" CellSpacing="1"
WeekendDayStyle-BackColor="#eeeeee" DayHeaderStyle-ForeColor="#ffffff" SelectionMode="None"
TodayDayStyle-BorderColor="#5e715e" TodayDayStyle-BorderWidth="1" TodayDayStyle-Font-Bold="true"
TodayDayStyle-ForeColor="#5e715e">

第二步是对内部功能的调整,这个工作主要集中在以下两个事件的处理上。

PreRender:当服务器控件将要呈现给其包含的Page对象时发生。

DayRender:当为Calendar控件在控件层次结构中创建每一天时发生。

先定义三个整型变量和整型数组
private int[] arrCurrentDays,arrPreDays,arrNextDays; //三个变量分别是当前月,前一月,和下一个月
private int intCurrentMonth,intPreMonth,intNextMonth; //三个整型数组存放相对月份写有blog的日期
protected System.Web.UI.WebControls.Calendar Calendar1; //这个就是我们的日历控件了

2. 下面我将分别给出这两个事件的源码,并在下面解释它实现的功能,如果你看不明白,可以先看下面的说明

PreRender
private void Calendar1_PreRender(object sender, System.EventArgs e)
{
Thread threadCurrent = Thread.CurrentThread;
CultureInfo ciNew = (CultureInfo)threadCurrent.CurrentCulture.Clone();
ciNew.DateTimeFormat.DayNames = new string[]{"日","一","二","三","四","五","六"};
ciNew.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Sunday;
threadCurrent.CurrentCulture = ciNew;
}

以上代码改变了星期名称的显示。你只需改变字符数组的值就能改名称显示。

DayRender
private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
//该控件在创建每一天时发生。

CalendarDay d = ((DayRenderEventArgs)e).Day;
TableCell c = ((DayRenderEventArgs)e).Cell;

// 初始化当前月有Blog的日期数组
if( intPreMonth == 0 )
{
intPreMonth = d.Date.Month; // 注意:日历控件初始化时我们得到的第一个月并不是当前月,而是前一个月的月份
intCurrentMonth = intPreMonth+1;
   if (intCurrentMonth>12)
intCurrentMonth=1 ;
intNextMonth = intCurrentMonth+1;
if (intNextMonth >12)
intNextMonth =1;
arrPreDays = getArrayDay(d.Date.Year,intPreMonth); //得到前一个月有blog的日期数组
arrCurrentDays = getArrayDay(d.Date.Year,intCurrentMonth) ;//得到当月有blog的日期数组
arrNextDays = getArrayDay(d.Date.Year,intNextMonth) ;//得到下个月有blog的日期数组
}

int j=0;
if( d.Date.Month.Equals(intPreMonth) )
{
while( ! arrPreDays[j].Equals(0) )
{
if(d.Date.Day.Equals(arrPreDays[j]))
{
c.Controls.Clear();
c.Controls.Add(new LiteralControl("<a href=day.aspx?year="+d.Date.Year+"&month="+
d.Date.Month+"&day="+d.Date.Day+">"+d.Date.Day+"</a>"));
}
j++;
}
}
else if( d.Date.Month.Equals(intCurrentMonth) )
{
while( ! arrCurrentDays[j].Equals(0) )
{
if(d.Date.Day.Equals(arrCurrentDays[j]))
{
c.Controls.Clear();
c.Controls.Add(new LiteralControl("<a href=day.aspx?year="+d.Date.Year+"&month="+
d.Date.Month+"&day="+d.Date.Day+">"+d.Date.Day+"</a>"));
}
j++;
}
}
else if( d.Date.Month.Equals(intNextMonth) )
{
while( ! arrNextDays[j].Equals(0) )
{
if(d.Date.Day.Equals(arrNextDays[j]))
{
c.Controls.Clear();
c.Controls.Add(new LiteralControl("<a href=day.aspx?year="+d.Date.Year+"&month="+
d.Date.Month+"&day="+d.Date.Day+">"+d.Date.Day+"</a>"));
}
j++;
}
}
}

日期控件一个页面能显示三个月份的日期,当前月是完整的,前一月和下一月有部分日期。DayRender事件会初始化具体日期的显示方式,在这里我们要对有blog内容的日期加上超级链接。于是我们需要在初始化时得到三个数组,数组里分别存放连续三个月的写有blog的日期。然后依次与当前日期比较,相同则加上链接。

在使用DayRender事件时,你一定不要忘了它是在每个日期初始化时执行一次,这就意味着初始化一次日历控件这个事件就要执行42次,所以要尽可能的简化操作,更不要不加判断的进行重复的数据库操作,我刚开始时没注意,在该事件里写了两个读库语句,结果严重影响性能。

下面这个方法是我用来获得日期数组的。
// 得到该月有blog的日期数组
private int[] getArrayDay(int intYear,int intMonth)
{
int[] intArray = new int[31];
//从数据库里选取符合要求的记录,将日期存入数组
string strSql = "select content_time from content where year(content_time)="+intYear+
" and month(content_time)="+intMonth;
dr = SqlHandle.GetDr(strSql);
while(dr.Read())
{
if( i==0 )
{
intArray[i] = dr.GetDateTime(0).Day;
i++;
}
else if( dr.GetDateTime(0).Day != intArray[i-1] )
{
intArray[i] = dr.GetDateTime(0).Day;
i++;
}
}
dr.Close();
return intArray;
}

具体的使用效果可以去我的blog看: www.dever.cn

时间: 2024-10-29 10:48:27

为你的Blog打造个性日历控件的相关文章

ASP.NET技巧:为Blog打造个性日历

asp.net|技巧|日历  日历控件是.net自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少.纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发.       新建一个用户控件,把calender控件拉进来.第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可.下图是我调整后的界面      属性设置如下:      <asp:calendar id="Calendar1" CellPadding="

ASP.NET技巧:为Blog打造个性日历_实用技巧

日历控件是.net自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少.纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发. 新建一个用户控件,把calender控件拉进来.第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可.下图是我调整后的界面 属性设置如下: <asp:calendar id="Calendar1" CellPadding="2" Width="160px"

JavaScript blog式日历控件

近来要做一个记事本系统,想找一个合适的日历控件,但网上的都是那种日历选择控件. 于是到qq的记事本系统找了一个,但里面的算法有点落后,所以用了它的样式自己写了个. 效果: 程序说明 [Date] 这个日历控件运用了很多Date相关操作和方法. 先说说Date对象几个有用的属性: getFullYear:返回年份值 getMonth:返回月份值 getDate:返回一个月中的日期值 getDay:返回一周中的日期值 其中对getDay可能比较陌生,下面列出值对应的星期: 值 星期 0 星期天 1 

PHP+JavaScript+HTML实现注册界面表单及日历控件

        本文主要是介绍我做PHP网站时的一个HTML的简单静态界面,它的主要功能是用户注册界面,并且参照了网上的例子使用JavaScript判断和My97DatePicker的日历控件.界面效果如下图所示:         同时插入数据库显示效果如下图所示:         可以看到引用My97DatePicker的日历控件及判断效果如下图所示:            其中注册界面register_student.html代码如下: <!DOCTYPE html PUBLIC "-

推荐兼容 IE、 FireFox 的 javascript 日历控件

javascript|控件|日历 网上的WEB日历控件很多,功能也很强大,可惜大都不支持FireFox,自己闲时写了一个,有如下特色: 特色: 一.支持IE6,FireFox 二.支持中.英文日历.可自由扩展其它语言 三.遇到Select 下拉框的时候,采取隐藏的方法 四.采用div作为日历容器,不会被浏览器拦截 五.支持日期回显,如果你的文本框中是2003-05-12,要修改此值时,日历会自动显示到2003年5月的视图 存在的问题: 一.速度上不是十分的快.和实现有关,但也不慢,毕竟是脚本,也

可选择小时和分钟的js日历控件

js|控件|日历 需要找一个 可选择小时和分钟的js日历控件,google了一通没有,最后在一个姐姐的blog上面找到了个修改自梅花雨控件的半成品,错误不少,改了半天终于能用了,放上来希望对大家的工作有帮助.   <script language="javascript">...  /**//**//**//** *使用方法: * (1)只选择日期   <input type="text" name="date"   readO

android开发-自定义日历控件实现事务操作

问题描述 自定义日历控件实现事务操作 android开发中,自定义控件的实现步骤,项目中实现日历控件如何标识事务 解决方案 我的博客中有这么一个实例,http://blog.csdn.net/mr_dsw/article/details/48755993就是通过自定义控件进行日历控件的实现,应该能满足你的要求.自定义控件实现的步骤无非就是onMeasure.onLayout.onDraw

有没有好一点的下拉式日历控件呢

问题描述 本人是初学.net,现在碰到一个下拉日历的问题,有哪位前辈可以支持一下,给俺一个下拉日历的控件呢. 解决方案 解决方案二:my97http://www.my97.net/解决方案三:http://blog.csdn.net/21aspnet/archive/2007/05/14/1607712.aspx解决方案四:引用1楼oec2003的回复: my97http://www.my97.net/ 解决方案五:my97真的好用,强烈推荐给lz解决方案六:Infragistics,我一直在用

js日历控件问题

问题描述 我想自己自定义假期在js日历控件上展现出来,就是例如我选择1号-3号放假,那么这三天就要在日历上展现出来(显示红色)或者有什么好的js控件推荐下.在线等高手解决谢谢了 解决方案 解决方案二:这种东西,只能你自己选择一个比较顺眼的JS,然后自己再进行修改,你要相信,你想要的东西,不一定就有符合的..自己努力吧..解决方案三:js日历展现该怎么实现呢?解决方案四:百度"JS日期控件"解决方案五:http://hi.baidu.com/csszhang/blog/item/1864