分类: 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. 一些简单的JavaScript的方法

    <script type="text/javascript"> //js跳转 function UserMouserDown() { confirm('你确定要删除吗? ...

  2. python021 Python3 错误和异常

    Python3 错误和异常 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python有两种错误很容易辨认:语法错误和异常. ...

  3. hust 1017 dancing links 精确覆盖模板题

    最基础的dancing links的精确覆盖题目 #include <iostream> #include <cstring> #include <cstdio> ...

  4. POJ 3177 边双连通求连通量度的问题

    这道题的总体思路就是找到连通量让它能够看作一个集合,然后找这个集合的度,度数为1的连通量为k,那么需要添加(k+1)/2条边才可以保证边双连通 这里因为一个连通量中low[]大小是相同的,所以我们用a ...

  5. 单源最短路径 Bellman_ford 和 dijkstra

    首先两个算法都是常用于 求单源最短路径 关键部分就在于松弛操作 实际上就是dp的感觉 if (dist[e.to] > dist[v] + e.cost) { dist[e.to] = dist ...

  6. ***ps -ef |grep 输出的具体含义是什么?

    Q: 比如:[root@localhost ~]# ps -ef | grep ApacheJetspeedroot 18887 18828 0 08:09 pts/0 00:00:00 grep A ...

  7. HDU 6437 最(大) 小费用最大流

    Problem L.Videos Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  8. Codeforces 549C The Game Of Parity【博弈】

    C语言纠错大赛的一道题,正好拿来补博弈~~ 给的代码写的略奇葩..不过还是直接在上面改了.. 题目链接: http://codeforces.com/problemset/problem/549/C ...

  9. 2015轻院校赛 B 迷宫 (bfs)

    http://acm.zznu.edu.cn/problem.php?id=1967 这套题的有毒   我交了好多遍才对 坑:机关要按照顺序走 并且在走这个机关之前不能走这个机关  但是能穿过这个机关 ...

  10. eclipse菜单字体乱码的解决

    方法一: 这个跟活动控制台代码页有关. 如果要更改为 UTF-8,则需要运行 chcp 命令: chcp 65001 有时新安装的系统可能在运行一些中文软件时显示错乱,可通过控制面板修改系统区域来管理 ...