标签:
《ASP.NET 3.5(C#)实用教程》4.8习题第一题,利用3个DropDownList控件实现年月日选择功能。效果如图所示:
实现这个功能要解决如下问题:
1.考虑每月天数问题,4,6,9,11月有30天,1,3,5,7,8,10,12月有31天,平年2月28天,闰年2月29天。
2.考虑实时显示,即修改了年份或月份之后,‘日’的可选项须及时做出更改。
解决思路如下,包含一系列的代码片段,完整源代码请点击这里下载。
1.初始化页面,让DropDownList显示当前的年月日。
页面初始化,先给年和月的DropDownList添加相应的项,并让当前的年和月被选中。然后根据当前被选中的年和月给添加显示日的DropDownList添加ListItem。最后设置当前的日被选中。
protected void init_date() //初始化日期,并将最初显示日期变为当前日期 { set_year(); set_month(); year.Items.FindByText(DateTime.Now.Year.ToString()).Selected = true; month.Items.FindByText(DateTime.Now.Month.ToString()).Selected = true; update_date(); day.Items.FindByText(DateTime.Now.Day.ToString()).Selected = true; }
添加年份选项,从1900到当前年份。
protected void set_year() //设置年,从1900到现在 { for (int i = 1900; i <= DateTime.Now.Year; i++) { year.Items.Add(new ListItem(i.ToString(), i.ToString())); } }
添加月份选项,1月到12月。
protected void set_month() //设置月,1-12 { for (int i = 1; i <= 12; i++) { month.Items.Add(new ListItem(i.ToString(), i.ToString())); } }
添加日选项,根据选中的年份和月份进行添加。先获取当前被选中的年和月,计算出当月的天数,然后添加。
根据年月获取当月天数。
protected int get_days(int ye,int mo) //根据年和月获取当月的天数 { if (mo == 4 || mo == 6 || mo == 9 || mo == 11)//30天的月份 { return 30; } else if (mo == 2) { if(ye%4==0) //闰年二月 { return 29; } else //平年二月 { return 28; } } else //31天的月份 { return 31; } }
根据天数添加日选项。
protected void set_day(int max) //设置日,参数为要设置的最大值 { int count = day.Items.Count; if(count>max) { for(int i=count;i>max;i--) { day.Items.Remove(day.Items.FindByText(i.ToString())); } } else if (count < max) { for(int i=count+1;i<=max;i++) { day.Items.Add(new ListItem(i.ToString(), i.ToString())); } } }
更新日选项,初始化时调用一次,年选项或月选项改变时触发。
protected void update_date() //更新‘日’ { int ye = int.Parse(year.SelectedItem.Text); int mo = int.Parse(month.SelectedItem.Text); int days = get_days(ye,mo); set_day(days); }
2.实时更新DropDownList选项,当年和月发生改变时客户端应立刻向服务器回发页面,然后服务器再把最新页面发送给客户端。以此达到更新目的。
在Page页面中设置3个DropDownList的AutoPostBack为true,这样一旦选项发生改变,服务器就能够将最新的页面发送回浏览器。
<asp:DropDownList ID="year" runat="server" OnSelectedIndexChanged="year_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>年 <asp:DropDownList ID="month" runat="server" OnSelectedIndexChanged="month_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>月 <asp:DropDownList ID="day" runat="server" AutoPostBack="true"></asp:DropDownList>日 <asp:Label ID="show_txt" runat="server" Text=""></asp:Label>
同时,在改变年和月两个选项时即触发OnSelectedIndexChanged事件时,应更型日的选项。
//每次更改年、月时都更新一下日 protected void year_SelectedIndexChanged(object sender, EventArgs e) { update_date(); } protected void month_SelectedIndexChanged(object sender, EventArgs e) { update_date(); }
以上是解决这个问题的思路,都是一些代码片段,需要完整的源代码请点击这里下载。
标签:
原文地址:http://www.cnblogs.com/robothy/p/4939075.html