【问题标题】:how to change months in this drop down如何在此下拉菜单中更改月份
【发布时间】:2015-03-12 19:14:35
【问题描述】:

我正在使用以下代码使用下拉菜单进行日期月份年份选择,我的天数会根据月份变化,例如 2 月比 28 日和 3 月比 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;
}

}

【问题讨论】:

    标签: c# asp.net web-services


    【解决方案1】:

    看起来您使用循环传递为i 的第一个被认为是Day 而不是Month,更好的方法是使用DateTime 构造函数的this overload 这需要year ,month,day 作为输入,而不是通过这种方式将 string 转换为 Date

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

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多