asp.net中如何列印ReportViewer報表
.net 2.0中的新控制項ReportViewer可以方便的製作並顯示報表,但是它沒有直接支援在網頁中的列印。我在分析網頁HTML原始碼的基礎上找到了直接列印的訣竅,先做成一個函數,方便直接使用。
1.包含ReportViewer報表的網頁的最終形式HTML DOM結構中,報表被放到一個<iframe>中,其id命名方式為:"ReportFrame"+報表控制項id;
2.報表內容被放到包含在1中的另一個<iframe>中,其id固定為:"report";
3.為了實現列印,我們只要先擷取內容<iframe>對象,設定焦點,然後調用print方法列印即可。
4.已經封裝好的javascript函數如下:
// JScript 檔案
//要列印ReportView報表的內容,只需要引用本檔案,然後調用PrintReportView()函數即可。
//例如:在某按鈕的點擊事件中包括代碼,onclick="PrintReportView(window,'ReportViewerYsqd');"
//得到ReportView控制項產生的用戶端代碼的報表內容區的FRAME對象
//參數:objWindow——包含ReportView控制項的window對象
// strReportViewerId——需要被列印的ReportViewer控制項的ID
//返回:得到的報表內容區FRAME對象;如果擷取失敗,返回null。
function GetReportViewContentFrame(objWindow,strReportViewerId)
...{
var frmContent=null; //報表內容區對象的FRAME對象
var strFrameId="ReportFrame" + strReportViewerId ; //asp.net自動產生的iframe 的id為:ReportFrame+報表控制項id
try
...{
frmContent=window.frames[strFrameId].frames["report"]; //報表內容架構的id為report
}
catch(e)
...{
}
return frmContent;
}
//列印ReportView控制項中的報表內容
//參數:objWindow——包含ReportView控制項的window對象
// strReportViewerId——需要被列印的ReportViewer控制項的ID
//返回:(無)
function PrintReportView(objWindow,strReportViewerId)
...{
var frmContent=GetReportViewContentFrame(objWindow,strReportViewerId);
if(frmContent!=null && frmContent!=undefined)
...{
frmContent.focus();
frmContent.print();
}
else
...{
alert("在擷取報表內容時失敗,無法通過程式列印。如果要手工列印,請滑鼠右鍵點擊報表內容地區,然後選擇菜單中的列印項。");
}
}
5.下面是一個測試列印報表的完整例子:
<%@ Page Language="C#" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無標題頁</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<rsweb:ReportViewer ID="rvYhqd" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="484px" Width="718px">
<LocalReport ReportPath="公用程式yhqd.rdlc">
</LocalReport>
</rsweb:ReportViewer>
<br />
<asp:Button ID="Button1" runat="server" Text="列印" OnClientClick="return PrintReport();" />
</div>
</form>
<!--這裡引用了包含列印報表函數的js檔案-->
<script language="javascript" type="text/javascript" src="ReportView.js"></script>
<script language="javascript" type="text/javascript">
<!--
//列印報表
function PrintReport()
...{
PrintReportView(window,"rvYhqd");
return false;
}
//-->
</script>
</body>
</html>