分类: ASP.NET/C#2007-04-16 09:20 518人阅读 评论(0) 收藏 举报

由3个dropdownlist组成的选择日期控件
可以设置相应属性

代码如下:

using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Web.UI;
using System.Web.UI.Design.WebControls;
using System.Web.UI.WebControls;

namespace AppCode
{
    /// <summary>
    /// AspNetDate 选择输入日期控件
    /// </summary>
    [DefaultProperty("Text"), 
    ParseChildren(false),
    PersistChildren(false),
    Description("专用于ASP.Net Web应用程序的日期控件"),
    Designer(typeof(DateDesigner)),
    ToolboxData("<{0}:WSCDate runat=server></{0}:WSCDate>")]
    public class WSCDate:Panel,INamingContainer,IPostBackDataHandler
    {
        #region 属性
        /// <summary>
        /// 获取/设置日期值。
        /// </summary>
        [Bindable(true),
        Browsable(true),
        Description("日期值"),
        Category("外观"), 
        DefaultValue("")] 
        public string Text 
        {
            get
            {
                if (ViewState["Text"] != null)
                {
                    return ViewState["Text"].ToString();
                }
                else
                {
                    if (IsNull)
                    {
                        return "";
                    }
                    else
                    {
                        DateTime date=System.DateTime.Today;
                        string str="";
                        switch (DateFormat)
                        {
                            case "YMD":
                                str=date.ToString("yyyy-MM-dd",System.Globalization.DateTimeFormatInfo.InvariantInfo);
                                break;
                            case "YM":
                                str=date.ToString("yyyy-MM",System.Globalization.DateTimeFormatInfo.InvariantInfo);
                                break;
                            case "Y":
                                str=date.Year.ToString();
                                break;
                        }
                        return str;
                    }
                }
            }

            set
            {
                if (value=="")
                {
                    ViewState["Text"] = "";
                }
                else if (DateFormat=="YMD")
                {
                    DateTime date;
                    try
                    {
                        date=Convert.ToDateTime(value);
                    }
                    catch
                    {
                        date=System.DateTime.Today;
                    }
                    string str = date.ToString("yyyy-MM-dd",System.Globalization.DateTimeFormatInfo.InvariantInfo);
                    if (str=="1900-01-01")
                        str="";
                    ViewState["Text"] =str;
                }
                else
                {
                    ViewState["Text"] = value;
                }
            }
        }
        /// <summary>
        /// 获取/设置日期值是否允许空。
        /// </summary>
        [Browsable(true), 
        Description("日期值是否允许空"),
        Category("布局"), 
        DefaultValue(false)] 
        public bool IsNull
        {
            get
            {
                return (ViewState["IsNull"]==null)?false:true;
            }
            set
            {
                if (value)
                    ViewState["IsNull"]=true;
            }
        }
        /// <summary>
        /// 获取/设置日期值格式(YMD:年-月-日 YM:年-月 Y:年)。
        /// </summary>
        [Browsable(true), 
        Description("日期值格式(YMD:年-月-日 YM:年-月 Y:年)"),
        Category("布局"), 
        DefaultValue("YMD")] 
        public string DateFormat
        {
            get
            {
                return (ViewState["DateFormat"]==null)?"YMD":(string)ViewState["DateFormat"];
            }

            set
            {
                ViewState["DateFormat"]=value;
            }
        }
        /// <summary>
        /// 获取/设置日期值能否编辑。
        /// </summary>
        [Browsable(true), 
        Description("能否编辑"),
        Category("行为"), 
        DefaultValue(true)] 
        public override bool Enabled
        {
            get
            {
                return (ViewState["Enabled"]==null)?true:false;
            }

            set
            {
                if (!value)
                    ViewState["Enabled"]=false;
            }
        }
        /// <summary>
        /// 获取/设置日期值中可供选择的年份长度。
        /// </summary>
        [Browsable(true), 
        Description("日期值中可供选择的年份长度"),
        Category("布局"), 
        DefaultValue(100)] 
        public int Length
        {
            get
            {
                object obj=ViewState["Length"];
                return (obj==null)?100:(int)obj;
            }

            set
            {
                ViewState["Length"]=value;
            }
        }
        /// <summary>
        /// 获取/设置选择年份的结束值。
        /// </summary>
        [Browsable(true), 
        Description("日期值中选择结束年份,当小于100时表示距今年数"),
        Category("布局"), 
        DefaultValue(0)] 
        public int End
        {
            get
            {
                object obj=ViewState["End"];
                int y;
                if (obj==null)
                {
                    y=System.DateTime.Today.Year;
                }
                else
                {
                    y=(int)obj;
                    if (y<100)
                    {
                        y=System.DateTime.Today.Year+y;
                    }
                }
                return y;
            }

            set
            {
                ViewState["End"]=value;
            }
        }
        /// <summary>
        /// 获取选择年份的开始值。
        /// </summary>
        [Browsable(false),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public int Start
        {
            get{return End-Length;}
        }

        #endregion
        重写事件

    }


    #region 控件设计器
    /// <summary>
    /// 服务器控件设计器。
    /// </summary>
    public class DateDesigner:System.Web.UI.Design.WebControls.PanelDesigner
    {
        /// <summary>
        /// 初始化 PagerDesigner 的新实例。
        /// </summary>
        public DateDesigner()
        {
            this.ReadOnly=true;
        }
        private WSCDate wb;

        /// <summary>
        /// 获取用于在设计时表示关联控件的 HTML。
        /// </summary>
        /// <returns>用于在设计时表示控件的 HTML。</returns>
        public override string GetDesignTimeHtml()
        {

            wb=(WSCDate)Component;
            wb.Text="";
            StringWriter sw=new StringWriter();
            HtmlTextWriter writer=new HtmlTextWriter(sw);
            wb.RenderControl(writer);
            return sw.ToString();
        }

        /// <summary>
        /// 获取在呈现控件时遇到错误后在设计时为指定的异常显示的 HTML。
        /// </summary>
        /// <param name="e">要为其显示错误信息的异常。</param>
        /// <returns>设计时为指定的异常显示的 HTML。</returns>
        protected override string GetErrorDesignTimeHtml(Exception e)
        {
            string errorstr="创建控件时出错:"+e.Message;
            return CreatePlaceHolderDesignTimeHtml(errorstr);
        }
    }
    #endregion
}

使用方法:在asp.net 页中加入

<%@ Register TagPrefix="cc1" Namespace="AppCode" Assembly="AppCode" %>

<cc1:wscdate id="WSCDate1" runat="server" IsNull="False" Length="46" End="2050" Wrap="False"></cc1:wscdate>

专用于ASP.Net Web应用程序的日期控件的更多相关文章

  1. asp.net asp.net application 升级到 asp.net web 解决找不到控件 批量生成.designer文件

    颇费周折后,其实很简单,只需要生成designer文件后,重新保存所有页面即可.就是懒得写.懒真的是一种病,手上不能懒,脑子里更不能懒,否则就是给自己挖坑,仔细认真,注意细节!!!! PS:注意修改p ...

  2. Visual Studio中用于ASP.NET Web项目的Web服务器

    当您在 Visual Studio 中开发 Web 项目时,需要 Web 服务器才能测试或运行它们. 利用 Visual Studio,您可以使用不同的 Web 服务器进行测试,包括 IIS Expr ...

  3. Asp.NetCore Web应用程序中的请求管道和中间件

    你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程. 上一节,我们讲到,Start ...

  4. ASP.NET Web 应用程序及页面生命周期

    以客户端浏览器向 ASP.NET Web 应用程序页面发送请求(Request)为起点,以浏览器收到 Web 服务器的响应(Response)为终点,这一完整的过程被称为"应用程序及页面的生 ...

  5. 配置ASP.NET Web应用程序, 使之运行在medium trust

    这文章会向你展示, 怎么配置ASP.NET Web应用程序, 使之运行在medium trust.   如果你的服务器有多个应用程序, 你可以使用code access security和medium ...

  6. asp.net 网站和asp.net Web 应用程序的一处不同

    环境为:VS2008Team+.net3.5 asp.net 网站前台页面<%= %>这样绑定可以,asp.net Web 应用程序就不可以 示例代码如下: 1.asp.net网站 < ...

  7. Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架

    Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 ...

  8. ASP.NET Web安装程序

    键发布ASP.NET Web安装程序,搞WebForm的童鞋看过来... 前言:最近公司有个Web要发布,但是以前都是由实施到甲方去发布,配置,这几天有点闲,同事让我搞一个一键发布,就和安装软件那样的 ...

  9. VS“新建网站”与“新建Asp.Net Web 应用程序”的区别

    WebApplication(新建Asp.Net Web 应用程序)编程模型的优点:针对大型网站 1.编译速度网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去. 2. ...

随机推荐

  1. SQL中varchar和nvarchar的基本介绍及其区别

    SQL中varchar和nvarchar的基本介绍及其区别 varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储 ...

  2. hexo干货系列:(二)hexo主题下载及配置

    前言 上一篇文章介绍了hexo+gitHub简易搭建属于自己的个人独立博客,但是主题是默认的landscape,略显简单,今天的教程推荐Jacman主题. Jacman是一款为Hexo打造的一款扁平化 ...

  3. ms sqlserver数据库建索引

    索引分类:从物理结构上可分为两种:聚集索引和非聚集索引 (此外还有空间索引.筛选索引.XML索引) 因为聚集索引是索引顺序与物理存储顺序一致,所以只能建一个. 聚集索引就是把数据按主键顺序存储: 因为 ...

  4. 【Kubernetes】kube-dns 持续重启

    kuberbetes部署和启动正常,但是kube-dns持续重启 使用命令 kubectl get pods --all-namespaces 得到结果 从图中可以看出kube-dns-c7d8589 ...

  5. [luoguP2577] [ZJOI2005]午餐(DP)

    传送门 显然吃饭时间越长的人排在前面越好,所以先排序. f[i][j]表示前i个人,A队的打饭时间为j的最优解,每个人只有两种选择,去A队或是去B队. #include <cstdio> ...

  6. 搭建nexus私服,无法下载相关jar包,报错Repository proxy-mode is BLOCKED_AUTO

    在搭建nexus私服的时候,之前没直接用来下载maven的相关插件jar包,一直可以使用, 结果今天要编译hadoop的时候,在linux上新用maven就报错了,无法下载maven的相关插件(如下) ...

  7. 转 蓝桥杯 历届试题 大臣的旅费 [ dfs 树的直径 ]

    题解: 求树的直径. 转一篇博客:http://www.cnblogs.com/hanyulcf/archive/2010/10/23/tree_radius.html 树的直径是指树的最长简单路.求 ...

  8. Swift 入门学习一:简单值

    1.简单值 使用“let”来声明常量,使用“var”来声明变量. 常量,在编译的时候,并不需要有明确的值,但是只能赋值一次.即:可以用常量来表示这样一个值--只需要决定一次,但是需要使用很多次. va ...

  9. struts2常用类型的Result

    2.2.1. dispatcher dispatcher类型是用于转发的Result,可以将请求转发给JSP.这种类型的Result对应的类为 ServletDispatcherResult,它是St ...

  10. response对象学习

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...