惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
Jina AI
Jina AI
D
Docker
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - deadshot123

tmplog javascript时间toString在java中转换成Date的测试代码 - deadshot123 - 博客园 在windows xp sp2 下修复 mdac 2.8 OutLook风格的菜单 td上长英文单词换行 struts-tiles初学 - deadshot123 - 博客园 时间控件最终版 点击改变颜色的日历(上篇改一行代码) W3wp.exe内存占用问题以及如何查看一个网站对应的w3wp.exe(转) test 分批提交数据(删除大数据量时候用) 在C#中运用SQLDMO备份和恢复SQL Server数据库 (转) Bat文件编写方法(转) Visual Studio 2005常用插件搜罗 (转) oracle使用numtoyminterval来添加准确的月或者年 2003 server iis默认不解析asp 小知识:象素与字号的换算(转) .net学习计划 关于xp+ie7下,执行confirm会出现点击取消也执行submit的问题解决方案
博客上的日历控件的初步实现
deadshot123 · 2007-05-21 · via 博客园 - deadshot123

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.ComponentModel;

namespace ClassLibrary1
{
    
public class  BlogDateControl:System.Web.UI.WebControls.WebControl,System.Web.UI.INamingContainer,System.Web.UI.IPostBackEventHandler   
    
{
        
private static readonly object ClickKey=new object();

        [Description(
"单击日期触发的时间!")]
        
public event EventHandler Click
        
{
            add
            
{
                Events.AddHandler(ClickKey, value);
            }

            remove
            
{
                Events.RemoveHandler(ClickKey, value);
            }

        }


        
private static readonly string[] header = new string[] "星期日""星期一""星期二""星期三""星期四""星期五""星期六" };

        
private DateTime showDate;

        
/// <summary>
        
/// Gets or sets the show date.
        
/// </summary>
        
/// <value>The show date.</value>

        [Description("格式必须为yyyy-MM一样")] 
        
public string ShowDate
        
{
            
get 
            
{
                
if (showDate == null)
                    showDate 
= Convert.ToDateTime(System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-01");
                
return showDate.ToString("yyyy-MM"); 
            }

            
set 
            
{
                
if (value == null)
                
{
                    showDate 
= Convert.ToDateTime(System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-01");    
                }

                
else
                
{
                    showDate 
= Convert.ToDateTime(value+"-01");
                }

                
            }

        }


        
protected override void AddAttributesToRender(HtmlTextWriter writer)
        
{
            
//为table标签定义属性和样式
           
// writer.AddAttribute(HtmlTextWriterAttribute.Width, "287px");
            
//writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "1px");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, 
"0");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, 
"0");
            
base.AddAttributesToRender(writer);

        }


        
/// <summary>
        
/// 获取与此 Web 服务器控件相对应的 <see cref="T:System.Web.UI.HtmlTextWriterTag"></see> 值。此属性主要由控件开发人员使用。
        
/// </summary>
        
/// <value></value>
        
/// <returns><see cref="T:System.Web.UI.HtmlTextWriterTag"></see> 枚举值之一。</returns>

        protected override HtmlTextWriterTag TagKey
        
{
            
get
            
{
                
return HtmlTextWriterTag.Table;
            }

        }

        
/// <summary>
        
/// 将控件的内容呈现到指定的编写器中。此方法主要由控件开发人员使用。
        
/// </summary>
        
/// <param name="writer"><see cref="T:System.Web.UI.HtmlTextWriter"></see>,表示要在客户端呈现 HTML 内容的输出流。</param>

        protected override void RenderContents(HtmlTextWriter writer)
        
{
           
            
            writer.RenderBeginTag(HtmlTextWriterTag.Thead);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddAttribute(HtmlTextWriterAttribute.Align, 
"center");
            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, 
"7");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            
            writer.Write(
this.showDate.Year+""+this.showDate.Month+"");
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            
for (int i = 0; i < BlogDateControl.header.Length; i++)
            
{
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                writer.Write(BlogDateControl.header[i]);
                writer.RenderEndTag();
            }


            writer.RenderEndTag();
            DateTime end
=this.showDate.AddMonths(1);
            
int days=((TimeSpan)end.Subtract(this.showDate)).Days;
            
int spaceday = Convert.ToInt32(this.showDate.DayOfWeek);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            
for (int i = 0; i < spaceday; i++)
            
{
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                writer.WriteLine(
"&nbsp;");
                writer.RenderEndTag();
            }

            
for (int i = 1; i <= days; i++)
            
{
                writer.Write(
"<td onclick=\"");
                writer.Write(Page.GetPostBackEventReference(thisthis.ShowDate+"-"+i.ToString().PadLeft(2,'0')));
                writer.Write(
"\">"+i.ToString()+"</td>");
                
                
//writer.RenderEndTag();
                if ((i + spaceday) % 7 == 0)
                
{
                    writer.RenderEndTag();
                    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                }

            }

            
if ((spaceday + days) % 7 != 0)
            
{
                
int allcount = spaceday + days > 35 ? 42 : 35;
                
for (int i = 0; i < allcount - spaceday - days; i++)
                
{
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                    writer.Write(
"&nbsp;");
                    
                    writer.RenderEndTag();
                }

                writer.RenderEndTag();
            }


        }


        
protected virtual void OnClick(StringEventArgs e)
        
{
            EventHandler clickEventDelegate 
=
               (EventHandler)Events[ClickKey];
            
if (clickEventDelegate != null)
            
{
                clickEventDelegate(
this, e);
            }


        }

    
        
IPostBackEventHandler 成员
}


    
public class StringEventArgs : EventArgs
    
{
        
private string argString;

        
public string ArgString
        
{
            
get return argString; }
        }


        
public StringEventArgs(string arg)
        
{
            
this.argString = arg;
        }


        
public override string ToString()
        
{
            
return this.argString;
        }

    }

}