当前位置:首页 > 网络编程 > 软件语言 > .NET > 控件代码共享 - 日期选择控件

控件代码共享 - 日期选择控件

点击次数:62 次 发布日期:2008-11-06 07:55:52 作者:源代码网
源代码网推荐
广告载入中
思路:实现日期年月日的选择
1、可以设定年的起止年份
2、排除不正确日期选择的可能
3、使用javascript实现控制
4、使用Text属性方便获取设置日期值
=================================
代码如下:
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 JSY
{
/// <summary>
/// AspNetDate 选择输入日期控件
/// </summary>
[DefaultProperty("Text"),
ParseChildren(false),
PersistChildren(false),
Description("专用于ASP.Net Web应用程序的日期控件"),
Designer(typeof(DateDesigner)),
ToolboxData("<{0}:JSYNetDate runat=server></{0}:JSYNetDate>")]
public class JSYNetDate: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),
软件开发网 www.mscto.com

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>
/// 重写OnLoad 方法。
/// </summary>
/// <param name="e">包含事件数据的 <see cref="EventArgs"/> 对象。</param>
protected override void OnLoad(EventArgs e)
{
if (Page.IsPostBack)
{
string y=Page.Request.Form[this.UniqueID+"_year"];
string m=Page.Request.Form[this.UniqueID+"_month"];
string d=Page.Request.Form[this.UniqueID+"_day"];
switch (DateFormat)
{
case "YMD":
if (y=="" || m=="" || d=="")
{
Text="";
}
else
{
Text=y+"-"+m+"-"+d;
}
break;
case "YM":
if (y=="" || m=="")
{
Text="";
}
else
{
Text=y+"-"+m;
}
break;
case "Y":
if (y=="")
{
Text="";
}
else
{
Text=y;
}
break;
}
}
base.OnLoad(e);
}
/// <summary>
/// 重写<see cref="System.Web.UI.WebControls.WebControl.AddAttributesToRender"/> 方法,验证是否有form(runat=server)控件
/// </summary>
/// <param name="writer"></param>
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
if(this.Page!=null)
this.Page.VerifyRenderingInServerForm(this);
base.AddAttributesToRender(writer);
}
/// <summary>
/// 重写<see cref="System.Web.UI.Control.OnPreRender"/>方法。
/// </summary>
/// <param name="e">包含事件数据的 <see cref="EventArgs"/> 对象。</param>
protected override void OnPreRender(EventArgs e)
{
string strJS=@"<script language="javascript">
//原创:贾世义 日期:2005-08-16 免费共享 v1.0


//邮箱:[email]jsyhello76@126.com[/email]
//请尊重版权,可以随意使用,但请注明出处//
function InitYear(pName,start,length,y)
{
  var selYear=eval("document.forms[0]."+pName+"_year");
  var n=selYear.length;
  selYear.length=n+length+1;
  for (i=0;i<=length;i++)
  {
selYear.options[n+i].value=(i+start);
selYear.options[n+i].text=(i+start);
  }
  if (y==0)
  {
selYear.selectedIndex =0;
  }
  else
  {
if (y>start)
{
        if (y-start<=length)
     {
selYear.selectedIndex = n+y-start;
     }
     else
  {
selYear.selectedIndex = length;
  }
     }
  }
}
function InitMonth(pName,m)
{
  var selMonth=eval("document.all."+pName+"_month");
  var n=selMonth.length;
  selMonth.length=n+12;
  for (i=1;i<10;i++)
  {
selMonth.options[n+i-1].value="0"+i;
selMonth.options[n+i-1].text=i;
  }
  for (i=10;i<=12;i++)
  {
selMonth.options[n+i-1].value=i;
selMonth.options[n+i-1].text=i;
  }
  if (m==0)
  {
selMonth.selectedIndex=0;
  }
  else
  {
selMonth.selectedIndex = n+m-1;
  }
}
function InitDay(pName,d)
{
  var selDay=eval("document.all."+pName+"_day");
  var n=selDay.length;
  selDay.length=n+31;
  for (i=1;i<10;i++)
  {
selDay.options[n+i-1].value="0"+i;
selDay.options[n+i-1].text=i;
  }
  for (i=10;i<=31;i++)
  {
selDay.options[n+i-1].value=i;
selDay.options[n+i-1].text=i;
  }
  if (d==0)
  {
selDay.sel

源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华