0

我希望有人在这方面指导我。当我从组合框中选择一个句点时,我必须在几个 aspx 页面中使用相同的方法来计算范围日期。例如,我在一个页面中有一个包含期间(当月销售额、上个月销售额、去年销售额、当年销售额)的组合,在另一个页面中有一个包含期间(当周费用、当月费用等)的组合。结果是一样的,给我一个日期范围(开始和结束日期),但并非所有组合都有相同的时期(一个有:月、周、年,另一个:月和年)。我该怎么做才能使其通用?正在考虑枚举位标志或用户控件......有人可以帮帮我吗?谢谢!

4

2 回答 2

0

这个答案对于评论来说有点太长了,所以我正在创建另一个答案。我没有使用过 RadComboBox,但我在 VS 2010 中创建了自己的自定义 .ascx 控件。这是您需要做的:

  1. 创建 .ascx 控件
  2. 在其中添加一个 ASP.NET 组合框(或者可能是 RadComboBox)
  3. 创建一个控件属性(字符串),列出要显示的选项,例如“年、周、月”。这样,您可以更改 HTML 中每页的选项,而无需任何其他编码。
  4. 在您的 .ascx 控件代码中,根据 #2 中的自定义属性更改显示选项。
  5. 根据选择的选项,在控件中创建函数以获取周期的开始和结束。

这样,您在给定页面中所要做的就是插入您的自定义控件,指定自定义属性,然后在需要时调用 GetStart 或 GetEnd。所有其他编码都在控件本身中处理。我想你也可以用 RadComboBox 做到这一点,尽管我从未使用过它。

于 2013-03-27T17:55:10.557 回答
0

这是您需要做的:

  1. 将时间戳字符串放入组合框选项中,例如“本月费用”的“2013-03-01:2013-03-31”。您将需要一个函数来获取本月、上个月、本周等的开始和结束。我在下面编写了一个示例。
  2. 保持您的组合框选项文本相同(例如,“本月的费用”)。
  3. 读入组合框选项值,并使用日期/时间字符串解析器获取范围。

获取上周、上个月等的代码将类似于:

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

然后,您只需将开始和结束转换为您放入组合框选项值的字符串。

于 2013-03-27T17:34:32.430 回答