我想做一个让用户可以根据calendar控件中的日期查看当天是否有文章的功能,就像博客园中的博客,比如这个:
http://www.cnblogs.com/ma6174/archive/2011/12/08/2280962.html
比如这天:2011-10-1有文章,则此日期显示为超链接,否则显示为普通文本.
我通过DayRender事件来处理显示,代码如下
但是这个方法好像只能正常显示第一个日期的链接.比如 1号和2号都有一篇文章,但是1号的显示为超链接,2号的就不能显示为超链接.把1号的删除掉之后,2号就可以显示为超链接请问该怎么做呢?
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        DateTime date = e.Day.Date;        if (list != null)
        {
            foreach (Article article in list)
            {
                if (article.aCreateTime.Date.Equals(date.Date))
                {
                    e.Cell.Text = "<a href=\"ArticleList.aspx?date=" + Server.UrlEncode(date.Date.ToString()) + "&aClassId=" + classId + "\">" + e.Day.Date.Day.ToString() + "</a>";
                }
                else
                {
                    e.Cell.Text = e.Day.Date.Day.ToString();
                }
            }
        }
        else
            e.Cell.Text = e.Day.Date.Day.ToString();
    }

解决方案 »

  1.   

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
    if(Array.IndexOf(你的文章日期集合,e.Day.Date)>-1)
    e.Cell.Text="设置为超链接;
                     else
                        e.Cell.Text = e.Day.Date.Day.ToString();
    }
    也就是说如果你的文章日期集合中存在e.Day.Date的,就设置该Cell为超链接格式。
      

  2.   

    哦,对了,日期比较是不行的,应该转成字符串形式比较,才会相等:
    e.Day.Date.ToString("yyyy-MM-dd")跟  你文章日期集合中的日期.ToString("yyyy-MM-dd")
    相比。
      

  3.   

    测试可行,能不能麻烦您指点下 我那样写为什么不行呢?问题出在哪里呢?问题肯定是出里面的foreach (Article article in list)这部分吧.为什么这么写就不行呢?
      

  4.   

    因为你foreach里找到一个第一个日期后,设为超链接;但此时循环没结束,集合的下一个日期肯定不匹配,所以又把它设为普通文本了。就是所后面的覆盖了第一次找到的操作。