分类: 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. 【Ajax 4】Ajax、JavaScript和JQuery的联系和区别

    导读:在之前,就分别学习了Ajax.JavaScript和JQuery,然后对于这三者之间的关系,是一直云里雾里的.尤其是后来学到了Ajax,就更是不明白了.现在,就给总结总结. 一.基本概述 1.1 ...

  2. [Kubernetes]Volume

    容器技术使用rootfs机制和Mount Namespace,构建出一个同宿主机完全隔离开的文件系统环境 那容器里进程新建的文件,怎么样才能让宿主机获取到?宿主机上的文件和目录,怎么样才能让容器里的进 ...

  3. 复(学)习化学时突然的一个 idea

    期中考试成功探底...但是某些化学问题还是很有信息学价值的... n 烷同分异构体计数. 这个题 fanhq666 出过,就是一个 dp. 设 f[i] 表示含有 i 个节点的无标号不同构的度数限制为 ...

  4. POJ3621 Sightseeing Cows【最短路】

    题目大意:在一个无向图里找一个环,是的点权和除以边权和最大 思路:UVA11090姊妹题 事实上当这题点权和都为1时就是上一题TUT #include <stdio.h> #include ...

  5. bzoj 2802 [Poi2012]Warehouse Store STL

    [Poi2012]Warehouse Store Time Limit: 10 Sec  Memory Limit: 64 MBSec  Special JudgeSubmit: 621  Solve ...

  6. 解决Genymotion运行Android 5.0一直卡在开机界面

    在一些机器,启动genymotion 的android5.0版模拟器时,会卡在启动界面,一直启动不了. 这是因为要求的开启虚拟选项没有打开,在第一次启动时,会有提示,但可能大家没有注意(我也没注意到, ...

  7. 【HDOJ6301】Distinct Values(贪心,set)

    题意:给定一个n个数的数列与m个区间,要求每个区间内的数字互不相同,求使得数列字典序最小的方案 n<=1e5 思路: #include<cstdio> #include<vec ...

  8. free delete malloc new(——高品质量程序设计指南第16章)

    free和delete只是把指针所指向的内存给释放掉了,但是指针本身并没有被删掉. 所以在释放掉内存后一定要记得将指针指向NULL ,动态内存分配不会自动的释放,一定要记得free掉

  9. 在线修改MySQL大表的表结构

    由于某个临时需求,需要给在线MySQL的某个超过千万的表增加一个字段.此表在设计之时完全按照需求实现,并没有多余的保留字段. 我们知道在MySQL中如果要执行ALTER TABLE操作,MySQL会通 ...

  10. yum安装LAMP环境与管理

    yum安装LAMP环境与管理 参考:http://www.zixue.it/ yum添加163源 地址: http://mirrors.163.com/.help/centos.html 下载方式: ...