使用月/年填充下拉列表

时间:2011-01-22 03:06:02

标签: c# asp.net

我有一个约会,我需要填写一个下拉列表,其中包含该日期和今天之间的月份/年份。例如,如果该日期是10/14/2010,则下拉列表应包含2010年10月,2010年11月,2010年12月,2011年1月。

我正在考虑这样做的方法是将该日期传递给一个函数,从今天开始向后循环步骤1个月,同时将每个月添加到集合中,直到我们到达该日期并最终返回字符串集合。然后,在页面加载时填充下拉控件。最后,使用一些带有页面方法的ajax来解析字符串并触发部分页面重新加载。

我只是想知道是否有一种简单的方法可以做到。

感谢。

5 个答案:

答案 0 :(得分:0)

你可以做类似这样的事情,这几乎就是你所描述的,除非向前计算:

private string[] FillDropDownWithDates(DateTime dt)   
{
        DateTime dtnow = DateTime.Now;

        List<string> values =  new List<string>();

        if ( (dt <= dtnow))
        {
            values.Add(String.Format("{0:y}", dt));
        }
        while ( (dt = dt.AddMonths(1)) <= dtnow || ( dt.Month == dtnow.Month && dt.Year == dtnow.Year) )
        {                
            values.Add(String.Format("{0:y}", dt));  // "March, 2008"                     YearMonth
        }


        return values.ToArray();

    }

答案 1 :(得分:0)

也许你可以试试这个:

static IEnumerable<DateTime> monthsBetween(DateTime startDate, DateTime endDate)
    {
        return Enumerable.Range(0, (endDate.Year - startDate.Year) * 12 + (endDate.Month - startDate.Month + 1))
                         .Select(m => new DateTime(startDate.Year, startDate.Month, 1).AddMonths(m));
    }

这不会以您想要的确切格式提供结果,但是您会得到漂移。 :)

答案 2 :(得分:0)

public static List<string> GetMonths(DateTime StartDate)
  {
   List<string> MonthList = new List<string>();
   DateTime ThisMonth = DateTime.Now.Date;

   while (ThisMonth.Date > StartDate.Date)
   {
    MonthList.Add(ThisMonth.ToString("MMMM") + " " + ThisMonth.Year.ToString());
    ThisMonth = ThisMonth.AddMonths(-1);
   }

   return MonthList;
  }

答案 3 :(得分:0)

年份,

public static IEnumerable<int> Range (int start, int count)
{
    int end = start + count;

    for (int i = start; i < end; i++) 
        yield return i;
}

var startYear = 2000;
YearDropDownList.ItemsSource= Enumerable.Range(startYear, 2050 - startYear + 1);

月份, 具有.ToString(“MMMM”)格式的可数列表。

答案 4 :(得分:0)

这就是我获得12个月/年的方式。希望代码有帮助。

public IEnumerable<SelectListItem> Additional12Months {
    get
    {
       return Enumerable.Range(12, 12).Select(i => new SelectListItem { Value = DateTime.Now.AddMonths(-(i)).ToShortDateString(), Text = DateTime.Now.AddMonths(-(i)).ToString("MMM-yyyy") }).ToList();                
    }
}