如何在此下拉菜单中更改月份

时间:2015-03-12 11:01:57

标签: c# asp.net web-services

我正在使用以下代码来进行日月选择使用下拉我的日期根据月份而变化,如果2月份超过28天,如果游行超过31但是在我的月份下降它仅显示1月12日时间。我没有收到错误这是我的代码..

 private int Day
{
    get
    {
        if (Request.Form[ddlDay.UniqueID] != null)
        {
            return int.Parse(Request.Form[ddlDay.UniqueID]);
        }
        else
        {
            return int.Parse(ddlDay.SelectedItem.Value);
        }
    }
    set
    {
        this.PopulateDay();
        ddlDay.ClearSelection();
        ddlDay.Items.FindByValue(value.ToString()).Selected = true;
    }
}
private int Month
{
    get
    {
        return int.Parse(ddlMonth.SelectedItem.Value);
    }
    set
    {
        this.PopulateMonth();
        ddlMonth.ClearSelection();
        ddlMonth.Items.FindByValue(value.ToString()).Selected = true;
    }
}
private int Year
{
    get
    {
        return int.Parse(ddlYear.SelectedItem.Value);
    }
    set
    {
        this.PopulateYear();
        ddlYear.ClearSelection();
        ddlYear.Items.FindByValue(value.ToString()).Selected = true;
    }
}

public DateTime SelectedDate
{
    get
    {
        try
        {
            return DateTime.Parse(this.Month + "/" + this.Day + "/" + this.Year);
        }
        catch
        {
            return DateTime.MinValue;
        }
    }
    set
    {
        if (!value.Equals(DateTime.MinValue))
        {
            this.Year = value.Year;
            this.Month = value.Month;
            this.Day = value.Day;
        }
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (this.SelectedDate == DateTime.MinValue)
        {
            this.PopulateYear();
            this.PopulateMonth();
            this.PopulateDay();
        }
    }
    else
    {
        if (Request.Form[ddlDay.UniqueID] != null)
        {
            this.PopulateDay();
            ddlDay.ClearSelection();
            ddlDay.Items.FindByValue(Request.Form[ddlDay.UniqueID]).Selected = true;
        }
    }
}

private void PopulateDay()
{
    ddlDay.Items.Clear();
    ListItem lt = new ListItem();
    lt.Text = "DD";
    lt.Value = "0";
    ddlDay.Items.Add(lt);
    int days = DateTime.DaysInMonth(this.Year, this.Month);
    for (int i = 1; i <= days; i++)
    {
        lt = new ListItem();
        lt.Text = i.ToString();
        lt.Value = i.ToString();
        ddlDay.Items.Add(lt);
    }
    ddlDay.Items.FindByValue(DateTime.Now.Day.ToString()).Selected = true;
}

private void PopulateMonth()
{
    ddlMonth.Items.Clear();
    ListItem lt = new ListItem();
    lt.Text = "MM";
    lt.Value = "0";
    ddlMonth.Items.Add(lt);
    for (int i = 1; i <= 12; i++)
    {
        lt = new ListItem();
        lt.Text = Convert.ToDateTime(i.ToString() + "/1/1900").ToString("MM");
        lt.Value = i.ToString();
        ddlMonth.Items.Add(lt);

    }
    ddlMonth.Items.FindByValue(DateTime.Now.Month.ToString()).Selected = true;
}

private void PopulateYear()
{
    ddlYear.Items.Clear();
    ListItem lt = new ListItem();
    lt.Text = "YYYY";
    lt.Value = "0";
    ddlYear.Items.Add(lt);
    for (int i = DateTime.Now.Year; i >= 1950; i--)
    {
        lt = new ListItem();
        lt.Text = i.ToString();
        lt.Value = i.ToString();
        ddlYear.Items.Add(lt);
    }
    ddlYear.Items.FindByValue(DateTime.Now.Year.ToString()).Selected = true;
}

}

1 个答案:

答案 0 :(得分:0)

看起来第一个使用循环传递的i被认为是而不是月,更好的方法是使用DateTime构造函数&#39; s { {3}}以年,月,日作为输入,而非以这种方式将string转换为Date

lt.Text = new DateTime(1900,i,1).ToString("MM");