asp.net中如何列印ReportViewer報表

來源:互聯網
上載者:User

 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>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.