0

我在一个 Intranet 网站上工作,特别是为员工开发每周监控工具。我需要的是DropDownList用几周填充一个,例如一周:

Week : From 12/10/15 to 18/10/15

我可以在另一个页面上过滤,但有年份和月份:

CalendarController c = new CalendarController();
ViewBag.ListYears = c.ListYears(iyear);
ViewBag.ListMonths = c.ListMonths(imonth);
ViewBag.ListDaysOfMonth = _service.ListDaysOfMonth(iyear.ToString(), imonth.ToString());

并使用表格来保存它们。

如何用 2015 年所有周的列表填充我的 DDList?

4

2 回答 2

1

要返回格式化周的列表,您可以使用以下方法

public List<string> FetchWeeks(int year)
{
    List<string> weeks = new List<string>();
    DateTime startDate = new DateTime(year, 1, 1);
    startDate = startDate.AddDays(1 - (int)startDate.DayOfWeek);
    DateTime endDate = startDate.AddDays(6);
    while (startDate.Year < 1 + year)
    {
        weeks.Add(string.Format("Week: From {0:dd/MM/yyyy}to {1:dd/MM/yyyy}", startDate, endDate));
        startDate= startDate.AddDays(7);
        endDate = endDate.AddDays(7);
    }
    return weeks;
}

然后在控制器中

var weeks = FetchWeeks(2105);
ViewBag.Weeks = new SelectList(weeks);

IEnumerable<SelectListItem>但是,这将回发格式化的值,这在控制器中可能没有多大用处,因此可以对其进行修改,以便您创建Value属性是表示一年中一周索引的数字并且Text属性是格式化的文本。

于 2015-10-13T11:35:28.963 回答
0

以下是您如何获得本年度的一周(荣誉在这里):

var jan1 = new DateTime(DateTime.Today.Year , 1, 1);
//beware different cultures, see other answers
var startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek));
var weeks=
    Enumerable
        .Range(0,54)
        .Select(i => new {
            weekStart = startOfFirstWeek.AddDays(i * 7)
        })
        .TakeWhile(x => x.weekStart.Year <= jan1.Year)
        .Select(x => new {
            x.weekStart,
            weekFinish=x.weekStart.AddDays(4)
        })
        .SkipWhile(x => x.weekFinish < jan1.AddDays(1) )
        .Select((x,i) => new {
            x.weekStart,
            x.weekFinish,
            weekNum=i+1
        });

然后将周数添加到下拉列表

于 2015-10-13T10:57:24.960 回答