2011-01-22 2 views
0

У меня есть дата, и мне нужно заполнить раскрывающийся список месяцами/годами между этой датой и сегодня. Например, если эта дата 10/14/2010, то раскрытие должно содержать октябрь 2010 г., ноябрь 2010 г., декабрь 2010 г., январь 2011 г.заполнить выпадающий список месяц/год

То, как я собираюсь это сделать, - передать эту дату функция, цикл с сегодняшнего дня назад шаг 1 месяц при добавлении каждого месяца в коллекцию, пока мы не достигнем этой даты, и, наконец, вернем коллекцию строк. Затем заполните раскрывающееся меню при загрузке страницы. Наконец, используйте некоторый ajax с методом страницы для анализа строки и запуска частичной перезагрузки страницы.

Мне просто интересно, есть ли простой способ сделать это.

Спасибо.

+0

Может ли пользователь изменить дату? Или он заполняется при загрузке страницы и всегда фиксируется? – Mayank

+0

Загружается при загрузке страницы: начальная дата - дата регистрации пользователя, а дата окончания - сегодня. – frenchie

+0

«Наконец, используйте некоторый ajax со страничным методом для анализа строки и запуска частичной перезагрузки страницы». Как это вписывается в ваш вопрос? Я считаю, что вы смотрите на оптимизированный способ найти разницу в месяце между двумя заданными датами, не так ли? – Mayank

ответ

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

На самом деле, мне нужно это в другом порядке, так как я заполняю выпадающее меню. Я понял. благодаря – frenchie

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").

Смежные вопросы