组合框中的通用周期范围方法
本文关键字:周期 范围 方法 组合 | 更新日期: 2023-09-27 18:06:04
我希望有人在这方面指导我。当我从组合框中选择一个周期时,我必须在几个aspx页面中使用相同的方法来计算范围日期。例如,我在一个页面中有一个周期组合(当前月销售额,上个月销售额,去年销售额,当前年销售额),在另一个页面中有一个周期组合(当前周费用,当前月费用等),结果是相同的,给我一个日期范围(开始和结束日期),但不是所有的组合都有相同的周期(一个有:月,周,年和另一个:月和年)。我怎么做才能使它通用?在Enum位标志或用户控件中思考…有人能帮我一下吗?谢谢!
你需要做的是:
- 将时间戳字符串放入组合框选项值中,例如"2013-03-01:2013-03-31"表示"本月费用"。您将需要一个函数来获取本月、上月、本周等的开始和结束。我在下面写了一个例子:
- 保持你的组合框选项文本相同(例如,"This month’s expenses")。
- 读取组合框中的选项值,并使用日期/时间字符串解析器来获取范围。
获取上周、上个月等的代码类似于:
public static void GetPeriod(string selected_period, out DateTime start, out DateTime end)
{
switch (selected_period)
{
case "last year":
start = new DateTime(DateTime.Today.Year - 1, 1, 1);
end = new DateTime(DateTime.Today.Year, 1, 1);
break;
case "this year":
start = new DateTime(DateTime.Today.Year, 1, 1);
end = new DateTime(DateTime.Today.Year + 1, 1, 1).AddDays(-1);
break;
case "last month":
start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-1);
end = new DateTime(DateTime.Today.Year + 1, DateTime.Today.Month, 1).AddDays(-1);
break;
case "this month":
start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
end = new DateTime(DateTime.Today.Year + 1, DateTime.Today.Month, 1).AddMonths(1).AddDays(-1);
break;
case "last week":
start = DateTime.Today.AddDays(-7);
while (start.DayOfWeek != DayOfWeek.Sunday)
start = start.AddDays(-1);
end = start.AddDays(6);
break;
case "this week":
start = DateTime.Today;
while (start.DayOfWeek != DayOfWeek.Sunday)
start = start.AddDays(-1);
end = start.AddDays(6);
break;
}
}
然后将开始和结束转换为字符串,并将其放入组合框选项值中
这个答案太长了,所以我创建了另一个答案。我没有使用RadComboBox,但我在VS 2010中创建了自己的自定义。ascx控件。下面是你需要做的:
- 创建.ascx控件
- 添加ASP。. NET组合框(或者可能是RadComboBox)
- 创建一个控件属性(字符串),列出你想要显示的选项,例如,"年,周,月"。这样,你就可以改变HTML中每个页面的选项,而不需要任何其他编码。 在.ascx控件代码中,根据#2中的自定义属性更改显示选项。
- 在控件中创建函数,根据所选择的选项来获取周期的开始和结束。
这样,在给定的页面中所要做的就是插入自定义控件,指定自定义属性,然后在需要时调用GetStart或GetEnd。所有其他编码都由控件本身负责。我想你也可以用RadComboBox来做这个,虽然我从来没有使用过它。