65.9K
CodeProject 正在变化。 阅读更多。
Home

解决方法:当用户点击“全选”时,报告应该传递一个空值,而不是解析多选下拉参数中的所有内容

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.43/5 (5投票s)

2008 年 2 月 12 日

CPOL

2分钟阅读

viewsIcon

48121

如果您有一个很长的下拉列表,并且只想传递一个值,可以使用这种方法

引言

我在处理 Reporting Services 时遇到了两个问题。本文解决了以下两个问题。

1) 在下拉菜单中有一个“空复选框”,这样用户就不*必须*为每个多选下拉框输入值。

2) 如果选择了所有值(即选择了“全选”),所有值都不会传递到查询/存储过程中,因为这会降低性能。

上图显示了空复选框和所有已选值。

背景

我的客户拒绝在 Reporting Services 之上添加应用程序层。因此,所有操作都必须在报告本身中完成。由于 Reporting Services 存在许多限制,处理上述问题的方法也有限。

创建空复选框

那么,我们如何让报告运行,而无需在多选下拉复选框中选择值呢?不幸的是,默认情况下,您无法传递空值/null 值。您至少必须选择一个值。

我的解决方案是创建一个空复选框。创建方法如下:

1) 创建一个新的数据集,命名为(例如)EmptyDS。

2) 在其中编写以下代码

 SELECT ColumnName FROM TableName UNION ALL SELECT '' AS Expr1 ORDER BY ColumnName 

3) 转到设计视图,并打开报告参数。选择参数后,在默认值下,选择“来自查询”,然后选择 EmptyDS。

就这样,您就有了空复选框

传递空值而不是下拉框中的所有值。

有很多建议的方法可以做到这一点。只有一种对我有效。

1) 首先,我们需要一个新的数据集来计数特定参数中的值的数量。因此,我们创建一个名为 CountDS 的新数据集。

2) 然后,您单击“数据”选项卡,并输入传递报告的数据集属性,而不是添加 =Parameters!DataSetName.Value,我将其更改为带有 =if(..) 的表达式。例如,

=iif(Parameters!DataSetName.Count>=Parameters!CountDS.Value, "",Parameters!DataSetName.Value

结论

这样,您的查询/存储过程就不会因为大量值被传递到存储过程中而消耗服务器资源。

关注点

他们需要为 Reporting Services 添加更多功能。如果客户对应用程序层不感兴趣,那么提供 Reporting Services 的功能就可能变得非常具有挑战性。

历史

Posted February 12, 2008
© . All rights reserved.