【问题标题】:populate drop down list with month/year用月/年填充下拉列表
【发布时间】:2011-01-22 03:06:01
【问题描述】:

我有一个日期,我需要使用该日期与今天之间的月/年填充下拉列表。例如,如果该日期是 2010 年 10 月 14 日,则下拉菜单应包含 2010 年 10 月、2010 年 11 月、2010 年 12 月、2011 年 1 月。

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

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

谢谢。

【问题讨论】:

  • 用户可以更改日期吗?还是在页面加载时填充并始终固定?
  • 在页面加载时加载:初始日期为用户注册日期,结束日期为今天。
  • "最后,使用一些带有页面方法的 ajax 来解析字符串并触发部分页面重新加载。"这如何适合您的问题?我相信您正在寻找一种优化方法来查找两个给定日期之间的月差,不是吗?
  • 用户可以从该下拉列表中选择一个月份,并根据所选月份更新页面上的报表。我不是在寻找两个日期之间的差异,而是在寻找这些日期之间的月份列表。

标签: c# asp.net


【解决方案1】:

也许你可以试试这个:

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】:

    你可以做这样的事情,这和你描述的差不多,除了向前计数:

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

    【讨论】:

    • 实际上,我需要它以其他顺序,因为我正在填充下拉列表。我得到了它。谢谢
    【解决方案3】:
    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;
      }
    

    【讨论】:

      【解决方案4】:

      一年,

      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") 格式的可枚举列表。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 详细说明问题陈述。添加相关标签。
        猜你喜欢
        • 2015-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2014-09-06
        相关资源
        最近更新 更多