码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET实现年月日选择功能

时间:2015-11-05 15:06:32      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

        《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;
    }
init_date()

  

  添加年份选项,从1900到当前年份。

技术分享
    protected void set_year()   //设置年,从1900到现在
    {
        for (int i = 1900; i <= DateTime.Now.Year; i++)
        {
            year.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }
    }
set_year()

  

  添加月份选项,1月到12月。

技术分享
    protected void set_month()  //设置月,1-12
    {
        for (int i = 1; i <= 12; i++)
        {
            month.Items.Add(new ListItem(i.ToString(), i.ToString()));
        } 
    }
set_month()

 

  添加日选项,根据选中的年份和月份进行添加。先获取当前被选中的年和月,计算出当月的天数,然后添加。

  根据年月获取当月天数。

 

技术分享
    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;
        }
    }
get_days(int ye,int mo)

 

 

  根据天数添加日选项。

技术分享
    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()));
            }
        }
    }
set_day(int max)

 

  更新日选项,初始化时调用一次,年选项或月选项改变时触发。

 

技术分享
    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);
    }
update_date()

 

 

   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>
View Code

 

  同时,在改变年和月两个选项时即触发OnSelectedIndexChanged事件时,应更型日的选项。

技术分享
    //每次更改年、月时都更新一下日
    protected void year_SelectedIndexChanged(object sender, EventArgs e)
    {
        update_date();
    }

    protected void month_SelectedIndexChanged(object sender, EventArgs e)
    {
        update_date();
    }
View Code

 

  以上是解决这个问题的思路,都是一些代码片段,需要完整的源代码请点击这里下载。

 

 

 

技术分享
技术分享

 

ASP.NET实现年月日选择功能

标签:

原文地址:http://www.cnblogs.com/robothy/p/4939075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!