zoukankan      html  css  js  c++  java
  • 用多个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用户控件,在网页拉进去即可。

  • 相关阅读:
    UVA 125 Numbering Paths
    UVA 515 King
    UVA 558 Wormholes
    UVA 10801 Lift Hopping
    UVA 10896 Sending Email
    SGU 488 Dales and Hills
    HDU 3397 Sequence operation
    数据库管理工具navicat的使用
    javascript封装animate动画
    关于webpack没有全局安装下的启动命令
  • 原文地址:https://www.cnblogs.com/insus/p/2725307.html
Copyright © 2011-2022 走看看