ComboBox中的通用周期范围方法

时间:2013-03-27 17:10:00

标签: c# asp.net telerik

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

2 个答案:

答案 0 :(得分:0)

以下是您需要做的事情:

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

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

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

答案 1 :(得分:0)

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

  1. 创建.ascx控件
  2. 在其中添加ASP.NET组合框(或者可能是RadComboBox)
  3. 创建一个控件属性(字符串),列出要显示的选项,例如“年,周,月”。这样,您可以在HTML中更改每页的选项,而无需任何其他编码。
  4. 在.ascx控制代码中,根据#2中的自定义属性更改显示选项。
  5. 根据选择的选项,在控件中创建函数以获取期间的开始和结束。
  6. 这样,您在给定页面中所要做的就是插入自定义控件,指定自定义属性,然后在需要时调用GetStart或GetEnd。所有其他编码都在控件本身中处理。我想你也可以用RadComboBox做到这一点,虽然我从未使用它。