【问题标题】:Generic Period Range Method in ComboBoxComboBox 中的通用周期范围方法
【发布时间】:2013-03-27 17:09:59
【问题描述】:

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

【问题讨论】:

  • 请有人给我一个想法如何做到这一点?

标签: c# asp.net telerik


【解决方案1】:

这是您需要做的:

  1. 将时间戳字符串放入组合框选项 values,例如“本月的费用”的“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;
    }
}

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

【讨论】:

  • 我已经有了那个开关盒,但我不想在所有页面中重复它。我正在考虑创建一个从 RadComboBox 继承的组合框 web 控件,并创建一个属性 Items 类型枚举位标志,填充我需要的项目取决于页面的示例页面 1(周、月、去年)页面 2(周、月, 季度)但不知道该怎么做,所以只需要创建一个组合框类型我的自定义组合框设置我的属性和它本身就可以完成所有工作。但是我该怎么做呢?
【解决方案2】:

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

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

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

【讨论】:

  • 嗨,彼得,感谢您的回答。我在想的是创建一个从 RadCombobx 扩展的用户控件 CustomCombox,在那里我将有一个方法来给我周期范围。我不明白你的意思是创建一个控制属性......你能解释一下吗?提前致谢!!抱歉不能做出新的答案,系统不让我。
  • 如果您创建自定义 .ascx 控件,您可以创建自定义属性以允许您直接在 HTML 中指定选项 - 例如,。在代码隐藏中,您将有类似:公共字符串 PeriodsToShow,然后指定获取/设置评估者。
  • 更多信息请见this link
  • 顺便说一句,Peter 用这个 PeriodsToShow="week,month,year" 我如何用这个值设置(填充)我的组合?我怎么问,如果 (PeriodsToShow= week,month,year) 那么这样做,等等......使用标志枚举是否合适?谢谢!
  • 我会使用逗号分割字符串,然后遍历生成的字符串数组,分别处理每个项目。例如,通过将“上周”和“本周”两个项目添加到您的组合框来处理“周”条目。 .NET Split string documentation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2017-05-08
  • 2010-10-29
相关资源
最近更新 更多