我有一系列需要日期范围的报告。为了“帮助”客户,我们有一个快速约会的下拉列表(过去7天,本月,上个月等)其中一个下拉项目是“自定义”。
当用户选择除custom之外的任何内容时,我们使用StartDate和EndDate参数的Available Values和Default Values中的数据集来相应地强制使用正确的日期戳。
但是,当用户选择“自定义”时,我们希望允许用户在StartDate和EndDate参数中选择任何日期。这些参数的可用值可以是任何值,因为我们已经定义了一组可用值,所以这是无法完成的。我尝试从我的存储过程中返回NULL,但这只是阻止用户设置任何内容。
实现这一目标的最佳方法是什么?这个任务一开始听起来很容易,但我已经要把头发拉出来了。
更新
我有一个下拉列表,SelectDateRange,我从以下数据库函数中提取日期范围的选项:
CREATE FUNCTION [dbo].[ufn_ReportDateRanges]
(
)
RETURNS @Dates TABLE
(
DateRangeID INT,
DateRangeName VARCHAR(255),
StartDate DATE,
EndDate DATE
)
AS
BEGIN
INSERT INTO @Dates SELECT 1, 'Today',
GetDate(),
GetDate()
INSERT INTO @Dates SELECT 2, 'Previous 7 Days',
GetDate() - 7,
GetDate()
INSERT INTO @Dates SELECT 3, 'Current Week',
DateAdd(dd, -(DatePart(dw, GetDate()) - 1), GetDate()),
DateAdd(dd, (7 - DatePart(dw, GetDate())), GetDate())
INSERT INTO @Dates SELECT 4, 'Previous Week',
DateAdd(dd, -(DatePart(dw, GetDate()) - 1) - 7, GetDate()),
DateAdd(dd, -(DatePart(dw, GetDate()) - 1) - 1, GetDate())
INSERT INTO @Dates SELECT 5, 'Current Month',
DateAdd(day,-(DatePart(day, getdate()) + 1), GetDate()),
DateAdd(month, 1, DateAdd(day, -DatePart(day, GetDate()), GetDate()))
INSERT INTO @Dates SELECT 6, 'Previous Month',
DateAdd(month, DateDiff(month, 0, GetDate())-1, 0),
DateAdd(month, DateDiff(month, -1, GetDate())-1, -1)
INSERT INTO @Dates SELECT 7, 'Year To Date',
DateAdd(yyyy, DateDiff(yyyy, 0, GetDate()), 0),
GetDate()
INSERT INTO @Dates SELECT 99, 'Custom',
NULL,
NULL
RETURN
END
我的数据集DateRanges是:
SELECT DateRangeID, DateRangeName, StartDate, EndDate
FROM dbo.ufn_ReportDateRanges()
WHERE DateRangeID = @SelectedDateRangeID
在我的StartDate和EndDate参数中,我将可用值设置为:
Dataset: DateRanges
Value: StartDate (or EndDate, respectively)
Label: StartDate (or EndDate, respectively)
并将其默认值设置为:
DataSet: DateRanges
Value: StartDate (or EndDate, respectively)
这对于强制字段始终与下拉选择匹配非常有用。但是当用户选择“自定义”时,我想使用日期选择器(不是所有历史记录中所有可能日期的非常长的下拉列表)将字段释放为任何日期。这甚至可能吗?
答案 0 :(得分:1)
<强>更新强>
选项3
将默认值设置为无。
当用户在DateRangeParameter中选择过去7天,上个月等时。它不会填充startdate和结束日期。表数据集根据用户输入的dateRangeId计算startdate和enddate。
当用户选择自定义并输入startdate和enddate时,您的表数据集将使用用户选择的startdate和enddates。
选项1 。为什么需要可用的值。我认为你应该把它保持为无。仅自定义默认值选项卡。
选项2 。如果选项1不起作用,请尝试此操作。
您需要更新可用值数据集以提取所有日期。
对于Startdate尝试这样的事情
WITH CTE as
(
SELECT 'Custom' QuickDateParam, CAST('01/01/1980' as datetime) as D
UNION ALL
SELECT 'Custom' QuickDateParam, DATEADD(d,1, D)
FROM CTE
WHERE D < getDate()
)
SELECT QuickDateParam, D FROM CTE
UNION ALL
SELECT 'Last7Days', DATEADD(d, -7, GETDATE())
UNION ALL
SELECT 'LastMonth', DATEADD(m, -1, GETDATE())
option (maxrecursion 0)
在可用值的数据集中,传递QuickDateParam
,它将显示相应的日期。
你也可以为结束日期做同样的事。
注意:您是否可以共享默认值/可用值的数据集和数据,因为这样可以更轻松地回答您的问题。
答案 1 :(得分:0)
我会编辑提供StartDate和EndDate默认值的数据集,以便它返回今天的日期(例如GETDATE())或类似的“自定义”行。然后,用户可以使用Calendar控件选择他们想要的任何日期。