用DropDownList显示不同的月份对应不同的天数
DropDownList1 表示年,DropDownList2表示月,DropDownList3表示天;
注意用将这三个DropDownList控件的AutoPostBack属性设为True。
用户可以方便地选择年月日,并且每月的日期会随着用户选择不同的年,月而发生相应的变化
其后台cs文件代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
DateTime tnow=DateTime.Now;//现在时间
ArrayList AlYear=new ArrayList();
int i;
for(i=2002;i<=2010;i++)
AlYear.Add(i);
ArrayList AlMonth=new ArrayList();
for(i=1;i<=12;i++)
AlMonth.Add(i);
if(!this.IsPostBack )
{
DropDownList1.DataSource=AlYear;
DropDownList1.DataBind();//绑定年
//选择当前年
DropDownList1.SelectedValue=tnow.Year.ToString();
DropDownList2.DataSource=AlMonth;
DropDownList2.DataBind();//绑定月
//选择当前月
DropDownList2.SelectedValue=tnow.Month.ToString();
int year,month;
year=Int32.Parse(DropDownList1.SelectedValue);
month=Int32.Parse(DropDownList2.SelectedValue);
BindDays(year,month);//绑定天
//选择当前日期
DropDownList3.SelectedValue=tnow.Day.ToString();
}
}
//判断闰年
private bool CheckLeap(int year)
{
if((year%4==0)&&(year%100!=0)||(year%400==0))
return true;
else return false;
}
//绑定每月的天数
private void BindDays( int year,int month)
{ int i;
ArrayList AlDay=new ArrayList();
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
for(i=1;i<=31;i++)
AlDay.Add(i);
break;
case 2:
if (CheckLeap(year))
{for(i=1;i<=29;i++)
AlDay.Add(i);}
else
{for(i=1;i<=28;i++)
AlDay.Add(i);}
break;
case 4:
case 6:
case 9:
case 11:
for(i=1;i<=30;i++)
AlDay.Add(i);
break;
}
DropDownList3.DataSource=AlDay;
DropDownList3.DataBind();
}
//选择年
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
int year,month;
year=Int32.Parse(DropDownList1.SelectedValue);
month=Int32.Parse(DropDownList2.SelectedValue);
BindDays(year,month);
}
//选择月
private void DropDownList2_SelectedIndexChanged(object sender, System.EventArgs e)
{
int year,month;
year=Int32.Parse(DropDownList1.SelectedValue);
month=Int32.Parse(DropDownList2.SelectedValue);
BindDays(year,month);
}
namespace WebApplication1
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/// <summary>
/// YearMonthDayDownDropList 的摘要说明。
/// </summary>
public abstract class YearMonthDayDownDropList : System.Web.UI.UserControl
{
//选择的年月日如:20021225
public string SelectTime
{
get
{
return Request.Form[YearName]+Request.Form[MonthName]+Request.Form[DayName]+Request.Form[HourName]+Request.Form[MinuteName];
}
}
protected int ServerYear; //服务器当前选择年
protected int ServerMonth;//服务器当前月
protected int ServerNowYear; //服务器当前年
protected int ServerDay; //服务器当前天
protected int ServerMonthDays;//当前月天数
protected int ServerHour;//小时
protected int ServerMinute;//分钟
protected string JavascriptFunName; //此user control发出的函数名称
protected string YearName; //此user control发出的年控件的名称
protected string MonthName;//此user control发出的月控件的名称
protected string DayName; //此user control发出的日控件的名称
protected string HourName;//小时
protected string MinuteName;//分钟
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string id= this.UniqueID;
if(!this.Page.IsClientScriptBlockRegistered(id))
{
JavascriptFunName="chanday"+id+"()";
YearName="year"+id;
MonthName="month"+id;
DayName="day"+id;
string scriptString ="<script language=javascript>";
scriptString=scriptString+"function "+JavascriptFunName;
scriptString=scriptString+ "{ var days;";
scriptString=scriptString+" var currentyear;";
scriptString=scriptString +"days=31;";
scriptString=scriptString+" if(window.document.forms[0]."+MonthName+".value==04||window.document.forms[0]."+MonthName+".value==06||window.document.forms[0]."+MonthName+".value==09||window.document.forms[0]."+MonthName+".value==11)";
scriptString=scriptString+" days=30;";
scriptString=scriptString+"else if(window.document.forms[0]."+MonthName+".value==02) {";
scriptString=scriptString+"Nowyear=window.document.forms[0]."+YearName+".value ;";
scriptString=scriptString+ " if((Nowyear%4==0 &&Nowyear%100!=0) || Nowyear%400==0)";
scriptString=scriptString+" days=29;";
scriptString=scriptString+" else days=28;";
scriptString=scriptString+" }";
scriptString=scriptString+ " flen=window.document.forms[0]."+DayName+".length ;";
scriptString=scriptString+" window.document.forms[0]."+DayName+".length =days;";
scriptString=scriptString+ " i=flen+1;";
scriptString=scriptString+"for(i;i<=days;i++)";
scriptString=scriptString+"{";
scriptString=scriptString+" window.document.forms[0]."+DayName+".options(i-1).text=i;";
scriptString=scriptString+" window.document.forms[0]."+DayName+".options(i-1).value=i;";
scriptString=scriptString+" }";
scriptString=scriptString+"}";
scriptString=scriptString+"</script>";
this.Page.RegisterClientScriptBlock(id, scriptString);
}
DateTime now=DateTime.Today;
ServerNowYear =now.Year ;
if(!Page.IsPostBack)
{
ServerYear=ServerNowYear ;
ServerMonth=now.Month;
ServerDay=now.Day;
ServerMonthDays=GetNowMonthDays(ServerYear,ServerMonth);
ServerHour = DateTime.Now.Hour;
ServerMinute = DateTime.Now.Minute;
}
else
{
ServerYear=Convert.ToInt32(Request.Form[YearName]);
ServerMonth=Convert.ToInt32(Request.Form[MonthName]);
ServerDay= Convert.ToInt32(Request.Form[DayName]);
ServerMonthDays=GetNowMonthDays(ServerYear,ServerMonth);
ServerHour = DateTime.Now.Hour;
ServerMinute = DateTime.Now.Minute;
}
}
//得到每个月的天数
private int GetNowMonthDays(int ServerYear,int ServerMonth)
{
int ServerMonthDays=31;
if(ServerMonth==4||ServerMonth==6||ServerMonth==9||ServerMonth==11)
ServerMonthDays=30;
else if(ServerMonth==02)
{
if((ServerYear%4==0 &&ServerYear%100!=0) || ServerYear%400==0)
ServerMonthDays=29;
else ServerMonthDays=28;
}
return ServerMonthDays;
}
//填充
protected void FillOptions(int StartValue,int OptionsLength,int SelectedOption)
{
for(int j=StartValue;j<=OptionsLength;j++)
{
string ShowOption;
if(j<10)
ShowOption="0"+j.ToString();
else ShowOption=j.ToString();
if(j==SelectedOption)
Response.Write(" <OPTION value="+ShowOption+" selected>"+ShowOption+"</OPTION>");
else Response.Write(" <OPTION value="+ShowOption+" >"+ShowOption+"</OPTION>");
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// 设计器支持所需的方法 - 不要使用
/// 代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}