Reporting Services 2005 常见问题解决方法(不断更新)
- 在新窗口打开链接
默认跳转到Url是在当前窗口打开,如果要在新窗口打开,使用以下格式输入:
="javascript:void(window.open('" & "url¶1=" & Fields!field1.Value & "','_blank'))" - 动态显示嵌入图片
首先拖一个图像控件到位置,然后设置控件的Source属性为Embedded,然后设置Value表达式,不同情况使用不同的嵌入图像名称,形如:
=IIF (Fields!DelayEntityPercent.Value < 10, "prj_green", IIF(Fields!DelayEntityPercent.Value >= 10 And Fields!DelayEntityPercent.Value < 30, "prj_yellow", "prj_red")) - 图片在单元格居中
设置Padding的Left到合适的大小 - 按记录数分页
为表格创建组,并设置在结尾处分页,分组表达式为:Int((RowNumber(Nothing)-1)/10) ,其中10表示没10条记录分一页 - 嵌入应用应用方案比较
嵌入方式
是否需要ReportServer
是否包含工具栏
是否包含参数输入区域
部署
安全性
在何处生成报表
总评
iframe,设置src为报表Url
是
是,依据报表设定,可显示完整工具栏
是,依据报表设定决定显示内容
Report Server和应用独立部署
当前用户需要有权限访问报表
Report Server
基本完整利用Reporting Services各种功能,但需要处理权限问题,另外iframe高度设置不够,会有滚动条
Iframe,设置src为某个调用Reporting Service API动态生成html的地址
是
无
无
Report Server和应用独立部署
可以模拟用户访问报表
Report Server
可解决权限问题,但是没有了Reporting Services的很多优点,还增加了Render成本
调用API获得HTML片段
是
无
无
Report Server和应用独立部署
可以模拟用户访问报表
Report Server
基本同上,只是省掉了iframe
ReportViewer+ReportServer(远程方式)
是,需要一个授权的副本
是,依据报表或Report Viewer设定,可显示完整工具栏
是,依据报表或Report Viewer设定
Report Server和应用独立部署,并且在应用的Web.config中添加Report Viewer配置
当前应用进程需要有权限访问报表
Report Server
基本完整利用Reporting Services功能,但是需要解决权限问题并考虑授权副本的问题,通过实现一个接口来获得报表访问权限
RerportViewer+RDLC(本地方式)
否
是,但不完整,缺少一些导出格式及打印按钮
否
部署应用及报表文件,并且在应用的Web.config中添加Report Viewer配置
由应用控制
当前应用
不能充分利用Reporting Services功能,应用服务器承担了生成报表的计算
- 除以零错误号,因为IIF和Switch等函数每个表达式都要计算,所以无法避免错误,因此使用自定义函数解决(调用时使用=Code.SafeDivide(a,b)):
Public Function SafeDivide(ByVal top, ByVal bottom) As Decimal
If IsNothing(top) Or IsNothing(bottom) Then
Return 0
End IfIf bottom = 0 Or top = 0 Then
Return 0
End IfReturn top / bottom
End Function - 隐藏ReportViewer控件的一些导出格式
ReportViewer控件有很多导出格式,下面的代码可以只保留导出Excel:
隐藏导出格式 - 在设计器里预览时,点击“查看报表",有数据缓存时,点击工具条的刷新按钮可以达到目的