专用于ASP.Net Web应用程序的日期控件
由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应用程序的日期控件的更多相关文章
- asp.net asp.net application 升级到 asp.net web 解决找不到控件 批量生成.designer文件
颇费周折后,其实很简单,只需要生成designer文件后,重新保存所有页面即可.就是懒得写.懒真的是一种病,手上不能懒,脑子里更不能懒,否则就是给自己挖坑,仔细认真,注意细节!!!! PS:注意修改p ...
- Visual Studio中用于ASP.NET Web项目的Web服务器
当您在 Visual Studio 中开发 Web 项目时,需要 Web 服务器才能测试或运行它们. 利用 Visual Studio,您可以使用不同的 Web 服务器进行测试,包括 IIS Expr ...
- Asp.NetCore Web应用程序中的请求管道和中间件
你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程. 上一节,我们讲到,Start ...
- ASP.NET Web 应用程序及页面生命周期
以客户端浏览器向 ASP.NET Web 应用程序页面发送请求(Request)为起点,以浏览器收到 Web 服务器的响应(Response)为终点,这一完整的过程被称为"应用程序及页面的生 ...
- 配置ASP.NET Web应用程序, 使之运行在medium trust
这文章会向你展示, 怎么配置ASP.NET Web应用程序, 使之运行在medium trust. 如果你的服务器有多个应用程序, 你可以使用code access security和medium ...
- asp.net 网站和asp.net Web 应用程序的一处不同
环境为:VS2008Team+.net3.5 asp.net 网站前台页面<%= %>这样绑定可以,asp.net Web 应用程序就不可以 示例代码如下: 1.asp.net网站 < ...
- Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架
Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 ...
- ASP.NET Web安装程序
键发布ASP.NET Web安装程序,搞WebForm的童鞋看过来... 前言:最近公司有个Web要发布,但是以前都是由实施到甲方去发布,配置,这几天有点闲,同事让我搞一个一键发布,就和安装软件那样的 ...
- VS“新建网站”与“新建Asp.Net Web 应用程序”的区别
WebApplication(新建Asp.Net Web 应用程序)编程模型的优点:针对大型网站 1.编译速度网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去. 2. ...
随机推荐
- 【Ajax 4】Ajax、JavaScript和JQuery的联系和区别
导读:在之前,就分别学习了Ajax.JavaScript和JQuery,然后对于这三者之间的关系,是一直云里雾里的.尤其是后来学到了Ajax,就更是不明白了.现在,就给总结总结. 一.基本概述 1.1 ...
- [Kubernetes]Volume
容器技术使用rootfs机制和Mount Namespace,构建出一个同宿主机完全隔离开的文件系统环境 那容器里进程新建的文件,怎么样才能让宿主机获取到?宿主机上的文件和目录,怎么样才能让容器里的进 ...
- 复(学)习化学时突然的一个 idea
期中考试成功探底...但是某些化学问题还是很有信息学价值的... n 烷同分异构体计数. 这个题 fanhq666 出过,就是一个 dp. 设 f[i] 表示含有 i 个节点的无标号不同构的度数限制为 ...
- POJ3621 Sightseeing Cows【最短路】
题目大意:在一个无向图里找一个环,是的点权和除以边权和最大 思路:UVA11090姊妹题 事实上当这题点权和都为1时就是上一题TUT #include <stdio.h> #include ...
- bzoj 2802 [Poi2012]Warehouse Store STL
[Poi2012]Warehouse Store Time Limit: 10 Sec Memory Limit: 64 MBSec Special JudgeSubmit: 621 Solve ...
- 解决Genymotion运行Android 5.0一直卡在开机界面
在一些机器,启动genymotion 的android5.0版模拟器时,会卡在启动界面,一直启动不了. 这是因为要求的开启虚拟选项没有打开,在第一次启动时,会有提示,但可能大家没有注意(我也没注意到, ...
- 【HDOJ6301】Distinct Values(贪心,set)
题意:给定一个n个数的数列与m个区间,要求每个区间内的数字互不相同,求使得数列字典序最小的方案 n<=1e5 思路: #include<cstdio> #include<vec ...
- free delete malloc new(——高品质量程序设计指南第16章)
free和delete只是把指针所指向的内存给释放掉了,但是指针本身并没有被删掉. 所以在释放掉内存后一定要记得将指针指向NULL ,动态内存分配不会自动的释放,一定要记得free掉
- 在线修改MySQL大表的表结构
由于某个临时需求,需要给在线MySQL的某个超过千万的表增加一个字段.此表在设计之时完全按照需求实现,并没有多余的保留字段. 我们知道在MySQL中如果要执行ALTER TABLE操作,MySQL会通 ...
- yum安装LAMP环境与管理
yum安装LAMP环境与管理 参考:http://www.zixue.it/ yum添加163源 地址: http://mirrors.163.com/.help/centos.html 下载方式: ...