Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用月/年填充下拉列表_C#_Asp.net - Fatal编程技术网

C# 用月/年填充下拉列表

C# 用月/年填充下拉列表,c#,asp.net,C#,Asp.net,我有一个日期,我需要在下拉列表中填入从该日期到今天之间的月/年。例如,如果该日期为2010年10月14日,则下拉列表应包含2010年10月、2010年11月、2010年12月和2011年1月 我想这样做的方式是将日期传递给函数,从今天开始向后循环一个月,同时将每个月添加到集合中,直到到达该日期,最后返回字符串集合。然后,在页面加载时填充下拉控件。最后,使用一些带有页面方法的ajax来解析回字符串并触发部分页面重新加载 我只是想知道有没有简单的方法 谢谢。你可以做类似的事情,除了向前数之外,这与你

我有一个日期,我需要在下拉列表中填入从该日期到今天之间的月/年。例如,如果该日期为2010年10月14日,则下拉列表应包含2010年10月、2010年11月、2010年12月和2011年1月


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

我只是想知道有没有简单的方法


谢谢。

你可以做类似的事情,除了向前数之外,这与你描述的差不多:

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

    }

也许你可以试试这个:

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));
    }
这不会以您想要的确切格式提供结果,但您会得到漂移:

今年

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;
  }
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);
一个月来,
一个.tostringmmm格式的可枚举列表。

这就是我得到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();                
    }
}

用户可以更改日期吗?或者它是在页面加载时填充并始终固定的?它是在页面加载时加载的:初始日期是用户的注册日期,结束日期是今天。最后,使用一些带有页面方法的ajax解析回字符串并触发部分页面加载。这与你的问题有什么关系?我相信您正在寻找一种优化的方法来查找两个给定日期之间的月差,不是吗?用户可以从该下拉列表中选择一个月,并根据所选月份更新页面上的报告表。我不是在寻找两个日期之间的差异,我是在寻找两个日期之间的月份列表。事实上,我需要它的另一个顺序,因为我正在填充一个下拉列表。我得到了它。谢谢你放弃问题陈述。添加相关标签。