您的位置:首页 > 其它

Reporting Services 2005 常见问题解决方法(不断更新)

2009-02-20 12:30 701 查看
在新窗口打开链接

默认跳转到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 If

If bottom = 0 Or top = 0 Then

Return 0

End If

Return top / bottom

End Function

隐藏ReportViewer控件的一些导出格式

ReportViewer控件有很多导出格式,下面的代码可以只保留导出Excel:

protected void reportViewer_PreRender(object sender, EventArgs e)

{

ReportViewer rw = sender as ReportViewer;

if (rw == null)

{

return;

}

var renders = from r in rw.ServerReport.ListRenderingExtensions()

where string.Compare(r.Name, "Excel", true) != 0

select r;

foreach (var r in renders)

{

HideRender(r);

}

}

private static void HideRender(RenderingExtension re)

{

Type renderType = re.GetType();

FieldInfo fieldInfo = renderType.GetField("m_serverExtension", BindingFlags.NonPublic | BindingFlags.Instance);

object extension = fieldInfo.GetValue(re);

Type extensionType = extension.GetType();

PropertyInfo propertyInfo = extensionType.GetProperty("Visible");

propertyInfo.SetValue(extension, false, null);

}


在设计器里预览时,点击“查看报表",有数据缓存时,点击工具条的刷新按钮可以达到目的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐