用多个DropDownList分别来绑定多个年月日

首先看看效果:

 

年与月的数据源,较好定义,而日的数据源即需要根据年与月选择之后,方可获取到那年月的所有日数。如年:

Year
 List< int> i_Year
    {
         get
        {
            List< int> y =  new List< int>();
             int Ny = DateTime.Now.Year;
             for ( int i =  1953; i <= Ny; i++)
            {
                y.Add(i);
            }
             return y;
        }
    }

 

月的数据源:

Month
 List< int> i_Month
    {
         get
        {
            List< int> m =  new List< int>();
             for ( int i =  1; i <=  12; i++)
            {
                m.Add(i);
            }
             return m;
        }
    }

 

日的数据源:

Day
public List< int> i_Day( int year,  int month)
    {
         int days = DateTime.DaysInMonth(year, month);
        List< int> d =  new List< int>();

         for ( int i =  1; i <= days; i++)
        {
            d.Add(i);
        }
         return d;
    }


由于多个地方是DropDownList数据绑定,因此Insus.NET先写一个通用DropDownList数据绑定的方法:

DropDownlistParse
  private  void DropDownlistParse(DropDownList ddl,  object dataSource,  string dataTextField,  string dataValueField)
    {
        ddl.DataSource = dataSource;
        ddl.DataTextField = dataTextField;
        ddl.DataValueField = dataValueField;
        ddl.DataBind();
        ddl.Items.Insert( 0new ListItem( string.Empty,  string.Empty));
    }

 

这样的话,在需要绑定的地方,即管传入参数即可。如在Page_Load时,需要对年与月的DropDownList数据绑定:

View Code
   protected  void Page_Load( object sender, EventArgs e)
    {
         if (!IsPostBack)
        {
            Data_Binding();
        }
    }

     private  void Data_Binding()
    {
        DropDownlistParse( this.DropDownListYear, i_Year.Select(y =>  new { value = y }).ToList(),  " value "" value ");
        DropDownlistParse( this.DropDownListMonth, i_Month.Select(m =>  new { value = m }).ToList(),  " value "" value ");
         this.DropDownListDay.Items.Insert( 0new ListItem( string.Empty,  string.Empty));
    }

 

在年或月DropDownlist控件有异动时,作相应对日的DropDownList控件数据绑定:

View Code
  protected  void DropDownListYear_SelectedIndexChanged( object sender, EventArgs e)
    {
        DayDataBinding();
    }

     protected  void DropDownListMonth_SelectedIndexChanged( object sender, EventArgs e)
    {
        DayDataBinding();
    }

     private  void DayDataBinding()
    {
         if ( this.DropDownListYear.SelectedIndex == - 1 ||  string.IsNullOrEmpty ( this.DropDownListYear.SelectedItem.Value))  return;
         if ( this.DropDownListMonth.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListMonth.SelectedItem.Value))  return;
        
         int y = Convert.ToInt32( this.DropDownListYear.SelectedItem.Value);
         int m = Convert.ToInt32( this.DropDownListMonth.SelectedItem.Value);

        DropDownlistParse( this.DropDownListDay, i_Day(y, m).Select(d =>  new { value = d }).ToList(),  " value "" value ");
    }

 

我们还要为了获取年月日三个DropDownList控件的值,因此写还得写三个属性:

View Code
  private  int? _year;
     private  int? _month;
     private  int? _day;

     public  int? Year
    {
         get
        {
             if (ViewState[ " Year "] !=  null)
            {
                 return Convert.ToInt32(ViewState[ " Year "]);
            }

             if ( this.DropDownListYear.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListYear.SelectedItem.Value))
                 return  null;
             else
                 return Convert.ToInt32( this.DropDownListYear.SelectedItem.Value);
        }
         set
        {
            ViewState[ " Year "] = value;
        }
    }

     public  int? Month
    {
         get
        {
             if (ViewState[ " Month "] !=  null)
            {
                 return Convert.ToInt32(ViewState[ " Month "]);
            }
             if ( this.DropDownListMonth.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListMonth.SelectedItem.Value))
                 return  null;
             else
                 return Convert.ToInt32( this.DropDownListMonth.SelectedItem.Value);

        }
         set
        {
            ViewState[ " Month "] = value;
        }
    }

     public  int? Day
    {
         get
        {
             if (ViewState[ " Day "] !=  null)
            {
                 return Convert.ToInt32(ViewState[ " Day "]);
            }
             if ( this.DropDownListDay.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListDay.SelectedItem.Value))
                 return  null;
             else
                 return Convert.ToInt32( this.DropDownListDay.SelectedItem.Value);
        }
         set
        {
            ViewState[ " Day "] = value;
        }
    }

 

最后是ASCX的html:

View Code
<% @ Control Language = " C# "  AutoEventWireup = " true "  CodeFile = " InsusDate.ascx.cs "  Inherits = " InsusDate "   %>
< asp:DropDownList  ID ="DropDownListYear"  runat ="server"  AutoPostBack ="true"  OnSelectedIndexChanged ="DropDownListYear_SelectedIndexChanged"  Width ="60px" ></ asp:DropDownList >< asp:DropDownList  ID ="DropDownListMonth"  runat ="server"  AutoPostBack ="true"  OnSelectedIndexChanged ="DropDownListMonth_SelectedIndexChanged"  Width ="40PX" ></ asp:DropDownList >< asp:DropDownList  ID ="DropDownListDay"  runat ="server"  Width ="40PX" ></ asp:DropDownList >

 

完整的ASCX.cs:

View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public  partial  class InsusDate : System.Web.UI.UserControl
{
     private  int? _year;
     private  int? _month;
     private  int? _day;

     public  int? Year
    {
         get
        {
             if (ViewState[ " Year "] !=  null)
            {
                 return Convert.ToInt32(ViewState[ " Year "]);
            }

             if ( this.DropDownListYear.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListYear.SelectedItem.Value))
                 return  null;
             else
                 return Convert.ToInt32( this.DropDownListYear.SelectedItem.Value);
        }
         set
        {
            ViewState[ " Year "] = value;
        }
    }

     public  int? Month
    {
         get
        {
             if (ViewState[ " Month "] !=  null)
            {
                 return Convert.ToInt32(ViewState[ " Month "]);
            }
             if ( this.DropDownListMonth.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListMonth.SelectedItem.Value))
                 return  null;
             else
                 return Convert.ToInt32( this.DropDownListMonth.SelectedItem.Value);

        }
         set
        {
            ViewState[ " Month "] = value;
        }
    }

     public  int? Day
    {
         get
        {
             if (ViewState[ " Day "] !=  null)
            {
                 return Convert.ToInt32(ViewState[ " Day "]);
            }
             if ( this.DropDownListDay.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListDay.SelectedItem.Value))
                 return  null;
             else
                 return Convert.ToInt32( this.DropDownListDay.SelectedItem.Value);
        }
         set
        {
            ViewState[ " Day "] = value;
        }
    }

     protected  void Page_Load( object sender, EventArgs e)
    {
         if (!IsPostBack)
        {
            Data_Binding();
        }
    }

     private  void Data_Binding()
    {
        DropDownlistParse( this.DropDownListYear, i_Year.Select(y =>  new { value = y }).ToList(),  " value "" value ");
        DropDownlistParse( this.DropDownListMonth, i_Month.Select(m =>  new { value = m }).ToList(),  " value "" value ");
         this.DropDownListDay.Items.Insert( 0new ListItem( string.Empty,  string.Empty));
    }

     protected  void DropDownListYear_SelectedIndexChanged( object sender, EventArgs e)
    {
        DayDataBinding();
    }

     protected  void DropDownListMonth_SelectedIndexChanged( object sender, EventArgs e)
    {
        DayDataBinding();
    }

     private  void DayDataBinding()
    {
         if ( this.DropDownListYear.SelectedIndex == - 1 ||  string.IsNullOrEmpty ( this.DropDownListYear.SelectedItem.Value))  return;
         if ( this.DropDownListMonth.SelectedIndex == - 1 ||  string.IsNullOrEmpty( this.DropDownListMonth.SelectedItem.Value))  return;
        
         int y = Convert.ToInt32( this.DropDownListYear.SelectedItem.Value);
         int m = Convert.ToInt32( this.DropDownListMonth.SelectedItem.Value);

        DropDownlistParse( this.DropDownListDay, i_Day(y, m).Select(d =>  new { value = d }).ToList(),  " value "" value ");
    }

     private  void DropDownlistParse(DropDownList ddl,  object dataSource,  string dataTextField,  string dataValueField)
    {
        ddl.DataSource = dataSource;
        ddl.DataTextField = dataTextField;
        ddl.DataValueField = dataValueField;
        ddl.DataBind();
        ddl.Items.Insert( 0new ListItem( string.Empty,  string.Empty));
    }

    List< int> i_Year
    {
         get
        {
            List< int> y =  new List< int>();
             int Ny = DateTime.Now.Year;
             for ( int i =  1953; i <= Ny; i++)
            {
                y.Add(i);
            }
             return y;
        }
    }

    List< int> i_Month
    {
         get
        {
            List< int> m =  new List< int>();
             for ( int i =  1; i <=  12; i++)
            {
                m.Add(i);
            }
             return m;
        }
    }

     public List< int> i_Day( int year,  int month)
    {
         int days = DateTime.DaysInMonth(year, month);
        List< int> d =  new List< int>();

         for ( int i =  1; i <= days; i++)
        {
            d.Add(i);
        }
         return d;
    }
}

 

可以把ASCX保存为一个ASCX用户控件,在网页拉进去即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值