2011-01-22 121 views
0

我有一个日期,我需要在该日期和今天之间填入一个包含月/年的下拉列表。例如,如果日期是2010年10月14日,那么下拉列表应包含2010年10月,2010年11月,2010年12月,2011年1月。用月/年填充下拉列表

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

我只是想知道是否有一个简单的方法来做到这一点。

谢谢。

+0

用户可以更改日期吗?或者它是否在页面加载时填充并始终修复? – Mayank 2011-01-22 03:14:10

+0

它在页面加载时加载:初始日期是用户的注册日期,结束日期是今天。 – frenchie 2011-01-22 03:16:34

回答

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; 
    } 
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(); 

    } 
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)); 
    } 

这不会给你的结果在确切格式,你想要的,但你得到的漂移。 :)

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”)格式。