默認跳轉到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功能,應用服務器承擔了生成報表的計算 |
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控件有很多導出格式,下面的代碼可以只保留導出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);
}