DropDownList 年月日联动
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Text { 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(); } } /// <summary> /// 数据的绑定 /// </summary> private void Data_Binding() { DropDownlistParse(this.DropDownListYear, i_Year.Select(y => new { v = y }).ToList(), "v", "v"); DropDownlistParse(this.DropDownListMonth, i_Month.Select(m => new { v = m }).ToList(), "v", "v"); this.DropDownListDay.Items.Insert(0, new ListItem(string.Empty, string.Empty)); } protected void DropDownListYear_SelectedIndexChanged(object sender, EventArgs e) { DayDataBinding(); } protected void DropDownListMonth_SelectedIndexChanged(object sender, EventArgs e) { DayDataBinding(); } /// <summary> /// 在年或月DropDownlist控件有异动时,作相应对日的DropDownList控件数据绑定: /// </summary> 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); ///i_Day(y, m).Select(d => new { v = d }).ToList()把原来的1 转为 v=1,这个数据源就有了v属性 DropDownlistParse(this.DropDownListDay, i_Day(y, m).Select(d => new { v = d }).ToList(), "v", "v"); } /// <summary> /// DropDownLIst数据绑定 /// </summary> /// <param name="ddl">DropDownList</param> /// <param name="dataSource">数据源</param> /// <param name="dataTextField"></param> /// <param name="dataValueField"></param> 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(0, new 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; } } /// <summary> /// 根据年月获得Day的List /// </summary> /// <param name="year"></param> /// <param name="month"></param> /// <returns></returns> 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; } } }
控件的前端页面是
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="InsusDate.ascx.cs" Inherits="Text.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>
日
用户控件,当使用的时候,拖到页面就可以了