public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int tYear = DateTime.Now.Year;                    //取得当前的年份
        int tMonth = DateTime.Now.Month;                  //取得当前的月份
        int tDay = DateTime.Now.Day;                      //取得当前的日期
        int MaxDay = 30;
        int y;        for (int i = tYear; i > (tYear - 150); i--)        
        {
            YearDrop.Items.Add(i.ToString());             //输出年的下拉框
        }
        for (int a = 1; a <= 12; a++)
        {
           MonthDrop.Items.Add(a.ToString());             //输出月的下拉框
        }
        for (int c = 1; c < MaxDay; c++)
        {
            DayDrop.Items.Add(c.ToString());               //输出日的下拉框
        }

  }}以上是未完成的代码;
要求1.瑞年二月MaxDay为28;
    2.大月份的时候MaxDay为31;
    3.小月份的时候MaxDay为30;
小弟之前作过好几次都出现日的下拉框值会变很多的问题;本人刚学。net望各位大侠们能够指点迷津;谢谢

解决方案 »

  1.   

    判断是否是闰年
                if (tYear % 4 == 0 && tYear % 100 != 0 || tYear % 400 == 0)
                    MaxDay = 29;
                else
                    MaxDay = 28;
      

  2.   

    本帖最后由 net_lover 于 2010-09-13 13:28:16 编辑
      

  3.   

    在月份的下拉菜单事件里做判断,根据月份改变MaxDay的值
      

  4.   

    Maxday与tYear 或tMonth无关;而是与被选中的年份或月份有关但是我怎么在
       for (int c = 1; c < MaxDay; c++)
    {
    DayDrop.Items.Add(c.ToString()); //输出日的下拉框
    }这个循环里取到
    for (int i = tYear; i > (tYear - 150); i--)  
      {
      YearDrop.Items.Add(i.ToString()); //输出年的下拉框
      }
    取到备选中的年的值呢?
      

  5.   

    你分开输出是不行的,你必须选择了年份、月份之后才能输出日期啊。采用ajax或者Postback都可以啊
      

  6.   

    代码
    <%@ Page Language="C#" Debug="true" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
      
      int[] D = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          int tYear = DateTime.Now.Year; //取得当前的年份
          int tMonth = DateTime.Now.Month; //取得当前的月份
          int tDay = DateTime.Now.Day; //取得当前的日期
          for (int i = tYear; i > (tYear - 150); i--)
          {
            YearDrop.Items.Add(i.ToString()); //输出年的下拉框
          }
          for (int a = 1; a <= 12; a++)
          {
            MonthDrop.Items.Add(a.ToString()); //输出月的下拉框
          }      if (DateTime.IsLeapYear(tYear)) D[1] = 29;
          for (int c = 1; c <= D[tMonth - 1]; c++)
          {
            DayDrop.Items.Add(c.ToString()); //输出日的下拉框
          }
        }
      }  protected void x_SelectedIndexChanged(object sender, EventArgs e)
      {    String y = YearDrop.SelectedValue;
        String m = MonthDrop.SelectedValue;
        if (String.IsNullOrEmpty(y) || String.IsNullOrEmpty(m))
        {
          Page.ClientScript.RegisterStartupScript(Page.GetType(), "js", "alert('请先选择年、月')", true);
          return;
        }
         
        DateTime d = new DateTime(int.Parse(y), int.Parse(m), 1);    if (DateTime.IsLeapYear(int.Parse(y)))
        {
          D[1] = 29;
        }
        else
        {
          D[1] = 28;
        }
        DayDrop.Items.Clear();
        for (int i = 1; i <= D[int.Parse(m) - 1]; i++)
        {
          DayDrop.Items.Add(i.ToString());
        }
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
    <body>
      <form id="form1" runat="server" method="post">
      <asp:DropDownList ID="YearDrop" runat="server" AutoPostBack="true" OnSelectedIndexChanged="x_SelectedIndexChanged">
      </asp:DropDownList>
      <asp:DropDownList ID="MonthDrop" runat="server" AutoPostBack="true" OnSelectedIndexChanged="x_SelectedIndexChanged">
      </asp:DropDownList>
      <asp:DropDownList ID="DayDrop" runat="server">
      </asp:DropDownList>
      </form>
    </body>
    </html>
      

  7.   

     private int Pdrn()
            {
                int inf = Convert.ToInt32(ddlnf.SelectedValue);
                if ((inf % 4 == 0 && inf % 100 != 0) || inf % 400 == 0)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
    protected void ddlmonth_SelectedIndexChanged(object sender, EventArgs e)
            {
                string year= ddlyear.SelectedValue;
            }
      

  8.   

    1 3 5 7 8 10 12 是31天
    4 6 9 11 是30天
    2 是28或29天  int MaxDay=0;
      switch(tMonth)//tMonth 你定义的月
      {
        case 1:
          MaxDay=31;
        case 3:
          MaxDay=31;
        case 5:
          MaxDay=31;
        case 7:
          MaxDay=31;
        case 8:
          MaxDay=31;
        case 10:
          MaxDay=31;
        case 12:
          MaxDay=31;
        case 4:
          MaxDay=30;
        case 6:
          MaxDay=30;
        case 9:
          MaxDay=30;
        case 11:
          MaxDay=30;
      }
      if ((inf % 4 == 0 && inf % 100 != 0) || inf % 400 == 0)//判断是否是闰年
      {
        MaxDay=29;
      }
      else
      {
        MaxDay=28;  }  for (int c = 1; c < MaxDay; c++)
      {
        DayDrop.Items.Add(c.ToString()); //输出日的下拉框
      }
      

  9.   

    刚才的貌似错了,在判断2月的外面要加一个是2月判断
    1   3   5   7   8   10   12   是31天 
    4   6   9   11   是30天 
    2   是28或29天     int   MaxDay=0; 
        switch(tMonth)//tMonth   你定义的月 
        { 
            case   1: 
                MaxDay=31; 
            case   3: 
                MaxDay=31; 
            case   5: 
                MaxDay=31; 
            case   7: 
                MaxDay=31; 
            case   8: 
                MaxDay=31; 
            case   10: 
                MaxDay=31; 
            case   12: 
                MaxDay=31; 
            case   4: 
                MaxDay=30; 
            case   6: 
                MaxDay=30; 
            case   9: 
                MaxDay=30; 
            case   11: 
                MaxDay=30; 
        } 
      if(tMonth==2)
      {
        if   ((inf   %   4   ==   0   &&   inf   %   100   !=   0)   ||   inf   %   400   ==   0)//判断是否是闰年 
        { 
            MaxDay=29; 
        } 
        else 
        { 
            MaxDay=28;     } 
      }
        for   (int   c   =   1;   c   <   MaxDay;   c++) 
        { 
            DayDrop.Items.Add(c.ToString());   //输出日的下拉框 
        }