2011-01-22 20 views
0

私は日付があり、その日付と今日の間の月/年をドロップダウンに入力する必要があります。たとえば、その日付が10/14/2010の場合、ドロップダウンには2010年10月、2010年11月、2010年12月、2011年1月が含まれます。月/年のドロップダウンリスト

これを行う方法は、今日から1ヶ月後にループして、毎月コレクションに追加してその日に到達し、最後に文字列のコレクションを返します。次に、ページの読み込みにドロップダウンコントロールを設定します。最後に、ページメソッドでいくつかのajaxを使用して文字列を解析し、ページの一部をリロードします。

私は、簡単な方法があるのか​​不思議です。

ありがとうございました。

+0

ユーザーは日付を変更できますか?それとも、ページの読み込み時に値が設定され、常に固定されていますか? – Mayank

+0

ページロード時に読み込まれます。最初の日付はユーザーの登録日で、終了日は今日です。 – frenchie

+0

"最後に、ページメソッドでいくつかのajaxを使用して文字列を解析し、部分的なページのリロードをトリガーします。"これはあなたの質問にどのように適合しますか?私はあなたが2つの与えられた日付の月の違いを見つける最適化された方法を見ていると信じていますか? – 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")形式の列挙リスト。