| 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; } |
|