RDLC8.0 报表完美解决方案

来源:互联网 发布:js弹出框返回主菜单 编辑:程序博客网 时间:2024/06/16 17:17

1.为了报表的松耦合,代码重用度高,先在数据库中建表

IsLandescape说明报表的方向,主要用于reportview显示

 

IsLandscape:在网页呈现的时候是横向的还是纵向的。

ReportName:报表文件的路径

ExportName:输出名称

HeadTableName:主数据源的名称,以后依次类推

 

2.新建强类型数据集

根据需求建强类型数据集,如果是单一的数据库可以保留adapter,因为我做项目事用的是多数据库这里就不用adapter。

 

 

3..新建rdlc报表,根据需求每种功能要做一个报表。数据源设置好以后,像刚才新建的表内添加内容,注意数据库中那几个TableName和报表中的数据源名称一样就行。

 

 

4..新建报表显示页面

[xhtml] view plaincopyprint?
  1. <%@ Page Language="C#" MasterPageFile="~/MspDemo.master" AutoEventWireup="true" CodeFile="ReportView.aspx.cs"  
  2.     EnableEventValidation="false" Inherits="ReportsPrint_ReportView" Title="Untitled Page" %>  
  3.   
  4. <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"  
  5.     Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>  
  6. <%@ Register Assembly="CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"  
  7.     Namespace="CrystalDecisions.Web" TagPrefix="CR" %>  
  8. <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">  
  9.   
  10.     <mce:script type="text/javascript" language="javascript"><!--  
  11.     
  12.       
  13.         function doPrint()  
  14.     {  
  15.         document.getElementById('ctl00$ContentPlaceHolder1$ReportViewer1$ctl01$ctl07$ctl00$ctl00$ctl00').click();  
  16.           
  17.         return false;  
  18.     }  
  19.       
  20. // --></mce:script>  
  21.   
  22.     <div id="divBody" style="width: 100%;" runat="server">  
  23.         <table style="width: 100%;">  
  24.             <tr>  
  25.                 <td colspan="2" style="background-image: url('../style/image/title_bg.jpg'); width: 100%;  
  26.                     height: 10px;" align="left">  
  27.                     <asp:Image ID="Image1" runat="server" ImageUrl="~/style/image/ico_2.gif" />  
  28.                     <asp:Label ID="lblTitle" runat="server" Font-Bold="true" Text="报表查看"></asp:Label>  
  29.                 </td>  
  30.             </tr>  
  31.         </table>  
  32.         <table style="width: 100%;" id="tbBody" runat="server">  
  33.             <tr style="width: 100%;">  
  34.                 <td style="width: 100%;">  
  35.                     <table style="width: 100%;" border="1" cellpadding="4" cellspacing="1">  
  36.                         <tr style="width: 100%; height: 21px">  
  37.                             <td style="width: 100%; height: 1px;" class="background:#EDEFF1; line-height:18px;"  
  38.                                 align="center" colspan="2">  
  39.                                 <div style="" id="ReportMenu" runat="server">  
  40.                                      <asp:LinkButton ID="lBtnFirst" runat="server" OnClick="lBtnFirst_Click" Visible="False">  
  41.                                         <img id="imgFirst" runat="server" src="../style/image/page-first.gif" mce_src="style/image/page-first.gif" style="border: 0px;" mce_style="border: 0px;" /></asp:LinkButton>  
  42.                                     <asp:LinkButton ID="lbtnNext" runat="server" OnClick="lbtnNext_Click" Visible="False">  
  43.                                         <img id="imgNext" runat="server" src="../style/image/page-next.gif" mce_src="style/image/page-next.gif" style="border: 0px;" mce_style="border: 0px;" /></asp:LinkButton>   
  44.                                     <asp:TextBox ID="txtPages" runat="server" Height="15px" Width="20px" Font-Size="Small"  
  45.                                         Visible="False"></asp:TextBox>  
  46.                                     <asp:Label ID="lblTotalPage" runat="server" Text="/1" Font-Size="Small" Visible="False"></asp:Label>   
  47.                                     <asp:LinkButton ID="lBtnPrevious" runat="server" OnClick="lBtnPrevious_Click" Visible="False">  
  48.                                         <img id="imgPrevious" runat="server" src="../style/image/page-prev.gif" mce_src="style/image/page-prev.gif" style="border: 0px;" mce_style="border: 0px;" /></asp:LinkButton>  
  49.                                     <asp:LinkButton ID="lBtnLast" runat="server" OnClick="lBtnLast_Click" Visible="False">  
  50.                                         <img id="imgLast" runat="server" src="../style/image/page-last.gif" mce_src="style/image/page-last.gif" style="border: 0px;" mce_style="border: 0px;" /></asp:LinkButton>  
  51.                                     <%--  &nbsp;&nbsp;   --%>  
  52.                                     显示比例:  
  53.   
  54.                                     <asp:DropDownList ID="ddlPageSize" runat="server" AutoPostBack="true" Height="20"  
  55.                                         Font-Size="Small" OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged" Width="108px">  
  56.                                     </asp:DropDownList>  
  57.                                     <asp:LinkButton ID="lBtnRefresh" runat="server" OnClick="lBtnRefresh_Click" Visible="False">  
  58.                                         <img id="img1" runat="server" src="../style/image/refresh.gif" mce_src="style/image/refresh.gif" style="border: 0px;" mce_style="border: 0px;" /></asp:LinkButton>  
  59.                                     <%-- &nbsp;&nbsp;--%>  
  60.                                     <asp:Label Width="60px" ID="Label2" runat="server" Text="搜索打印机" Visible="False"></asp:Label><%--&nbsp;--%>  
  61.                                     <asp:DropDownList ID="ddlPrintSearch" Visible="false" runat="server" Width="238px"  
  62.                                         Font-Size="Small">  
  63.                                     </asp:DropDownList><%--&nbsp;&nbsp;--%>  
  64.                                     <asp:Button ID="btnPrintSet" runat="server" OnClientClick="return doPrint()" Text="打印"  
  65.                                         Width="65px" CssClass="btn" Font-Size="Small" OnClick="btnPrintSet_Click" Visible="True" />  
  66.                                     <asp:Button ID="btnExcel" runat="server" Text="导出Excel" CssClass="btn" Font-Size="Small"  
  67.                                         OnClick="btnExcel_Click" />  
  68.                                     <asp:Button ID="btnPDF" runat="server" Text="导出PDF" CssClass="btn" Font-Size="Small"  
  69.                                         OnClick="btnPDF_Click" />  
  70.                                     <asp:Button ID="btnReturn" runat="server" Text="关闭" CssClass="btn" Font-Size="Small"  
  71.                                         OnClick="btnReturn_Click" />  
  72.                                 </div>  
  73.                             </td>  
  74.                         </tr>  
  75.                         <tr>  
  76.                             <td>  
  77.                                 <div id="divReport" runat="server" style="table-layout: auto; overflow: auto; height: 29.7cm">  
  78.                                     <rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="100%" BorderStyle="None"  
  79.                                         Font-Names="Verdana" Font-Size="8pt" BackColor="White" SizeToReportContent="True"  
  80.                                         Style="max-height: 1400; padding-bottom: inherit; page-break-inside: auto; page-break-after: always;"  
  81.                                         Height="1051px">  
  82.                                         <LocalReport>  
  83.                                             <DataSources>  
  84.                                                 <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="ReportView_StockOrder" />  
  85.                                                 <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="ReportView_StockOrderDetail" />  
  86.                                             </DataSources>  
  87.                                         </LocalReport>  
  88.                                     </rsweb:ReportViewer>  
  89.                                     <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"  
  90.                                         TypeName="ReportViewTableAdapters."></asp:ObjectDataSource>  
  91.                                 </div>  
  92.                                 <%--<CR:CrystalReportSource ID="RptReportView" runat="server">  
  93.         <Report FileName="E:/MySystem/SYS.View/ReportsPrint/RptReportView.rpt">  
  94.         </Report>  
  95.     </CR:CrystalReportSource>  
  96.     <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" Height="1121px" ReportSourceID="RptReportView" Width="893px" />  
  97.     &nbsp;--%>  
  98.                             </td>  
  99.                         </tr>  
  100.                     </table>  
  101.                 </td>  
  102.             </tr>  
  103.         </table>  
  104.     </div>  
  105. </asp:Content>  

 

 

[c-sharp] view plaincopyprint?
  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Collections;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.WebControls;  
  9. using System.Web.UI.WebControls.Adapters;  
  10. using System.Web.UI.WebControls.WebParts;  
  11. using System.Web.UI.HtmlControls;  
  12. using System.Data.SqlClient;  
  13. using Microsoft.Reporting.WebForms;  
  14. using System.IO;  
  15. using System.Text;  
  16. using System.Drawing.Printing;  
  17. using System.Drawing.Imaging;  
  18. using System.DirectoryServices;  
  19. using System.Collections.Generic;  
  20.   
  21.   
  22. using SYS.Biz.InboundInfo;  
  23. using SYS.Cmn;  
  24. using SYS.Info.ReportsPrint;  
  25. using SYS.Biz.ReportsPrint;  
  26. using SYS.View;  
  27. using SYS.Info.InboundInfo;  
  28.   
  29. public partial class ReportsPrint_ReportView : SYS.View.PageBase  
  30. {  
  31.     private static string sSql = "";  
  32.   
  33.     private static ReportsInfo reportsinfo = new ReportsInfo();  
  34.   
  35.     private int m_currentPageIndex;  
  36.   
  37.     private IList<Stream> m_streams;  
  38.   
  39.     protected void Page_Load(object sender, EventArgs e)  
  40.     {  
  41.         Response.Buffer = true;  
  42.         Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);  
  43.         Response.Expires = 0;  
  44.         Response.CacheControl = "no-cache";  
  45.         Response.Cache.SetNoStore();  
  46.         Page.Response.Expires = 0;  
  47.         if (!IsPostBack)  
  48.         {  
  49.             GetData(true);// /获得报表文件名和导出文件名             
  50.             ShowReport();  
  51.             if (reportsinfo.IsLandscape)  
  52.             {  
  53.                 ddlPageSize.Items.Clear();  
  54.                 ddlPageSize.Items.Insert(0, new ListItem("按200%显示""204"));  
  55.                 ddlPageSize.Items.Insert(1, new ListItem("按150%显示""153"));  
  56.                 ddlPageSize.Items.Insert(2, new ListItem("按100%显示""89"));  
  57.                 ddlPageSize.Items.Insert(3, new ListItem("按50%显示""51"));  
  58.                 ddlPageSize.Items.Insert(4, new ListItem("按25%显示""26"));  
  59.                 this.ddlPageSize.SelectedValue = "89";  
  60.             }  
  61.             else  
  62.             {  
  63.                 ddlPageSize.Items.Clear();  
  64.                 ddlPageSize.Items.Insert(0, new ListItem("按200%显示""270"));  
  65.                 ddlPageSize.Items.Insert(1, new ListItem("按150%显示""202"));  
  66.                 ddlPageSize.Items.Insert(2, new ListItem("按100%显示""130"));  
  67.                 ddlPageSize.Items.Insert(3, new ListItem("按50%显示""67"));  
  68.                 ddlPageSize.Items.Insert(4, new ListItem("按25%显示""34"));  
  69.                 this.ddlPageSize.SelectedValue = "130";  
  70.             }  
  71.   
  72.             this.ReportViewer1.Attributes.Add("style""align:center;");  
  73.             this.txtPages.Text = "1";  
  74.             PageShowSize();  
  75.             PageChange();  
  76.         }  
  77.   
  78.     }  
  79.   
  80.     //获得reportsinfo的具体内同,如果是第一次使用,则从数据库中调取,否则从session里边调取  
  81.     private void GetData(bool isfirst)  
  82.     {  
  83.         try  
  84.         {  
  85.             //isfirst为True则说明是第一调用该过程,则从数据库中调用,反之则从session里调用  
  86.   
  87.   
  88.   
  89.             if (isfirst)  
  90.             {  
  91.                 GetReportsInfo();  
  92.             }  
  93.             else  
  94.             {  
  95.                 reportsinfo = SessionDataManager.GetMySessionCatch("reportsinfo"this.Context) as ReportsInfo;//从session中取值  
  96.   
  97.   
  98.   
  99.                 if (reportsinfo == null)  
  100.                 {  
  101.                     GetReportsInfo();  
  102.                 }  
  103.                 else  
  104.                 {  
  105.                     if ((reportsinfo.ReportName.Trim() == null ? "" : reportsinfo.ReportName.Trim()) == "")  
  106.                     {  
  107.                         GetReportsInfo();  
  108.                     }  
  109.                     if ((reportsinfo.ExportName.Trim() == null ? "" : reportsinfo.ExportName.Trim()) == "")  
  110.                     {  
  111.                         GetReportsInfo();  
  112.                     }  
  113.                     if ((reportsinfo.HeadTableName.Trim() == null ? "" : reportsinfo.HeadTableName.Trim()) == "")  
  114.                     {  
  115.                         GetReportsInfo();  
  116.                     }  
  117.                 }  
  118.             }  
  119.         }  
  120.         catch (Exception ex)  
  121.         {  
  122.             throw new Exception(ex.Message);  
  123.         }  
  124.     }  
  125.   
  126.     //从数据库中获得ReportsInfo的值  
  127.   
  128.   
  129.   
  130.     private void GetReportsInfo()  
  131.     {  
  132.         try  
  133.         {  
  134.             string type = Request.QueryString["type"].Trim() == null ? "" : Request.QueryString["type"].Trim();  
  135.             if (type.Trim() != "" && Util.IsNumber(type.Trim().ToString()))  
  136.             {  
  137.                 reportsinfo = BizReportsInfo.GetInstance().ReportInfoQuery(Convert.ToInt32(type.Trim()));  
  138.             }  
  139.             else  
  140.             {  
  141.                 ShowErroMessage("传入的报表编号不正确,请检查!");  
  142.             }  
  143.             SessionDataManager.SetMySessionCatch("reportsinfo", reportsinfo, this.Context);  
  144.         }  
  145.         catch (Exception ex)  
  146.         {  
  147.             throw new Exception(ex.Message);  
  148.         }  
  149.     }  
  150.   
  151.     //提示错误信息  
  152.     private void ShowErroMessage(string strMessage)  
  153.     {  
  154.         string strScript = "<mce:script type = 'text/javascript'><!--  
  155. alert(/"" + strMessage + "/");  
  156. // --></mce:script>";  
  157.         Page.ClientScript.RegisterStartupScript(this.GetType(), "onclick", strScript);  
  158.         return;  
  159.     }  
  160.   
  161.     //前后翻页跳转的实现  
  162.   
  163.   
  164.   
  165.     private void PageChange()  
  166.     {  
  167.         if (this.ReportViewer1.CurrentPage == 0)  
  168.         {  
  169.             this.imgPrevious.Src = "../style/image/page-prev-disabled.gif";  
  170.             this.imgFirst.Src = "../style/image/page-first-disabled.gif";  
  171.             this.lBtnFirst.Enabled = false;  
  172.             this.lBtnPrevious.Enabled = false;  
  173.         }  
  174.         else  
  175.         {  
  176.             this.imgPrevious.Src = "../style/image/page-prev.gif";  
  177.             this.imgFirst.Src = "../style/image/page-first.gif";  
  178.             this.lBtnFirst.Enabled = true;  
  179.             this.lBtnPrevious.Enabled = true;  
  180.         }  
  181.         if (this.ReportViewer1.CurrentPage == this.ReportViewer1.LocalReport.GetTotalPages())  
  182.         {  
  183.             this.imgNext.Src = "../style/image/page-next-disabled.gif";  
  184.             this.imgLast.Src = "../style/image/page-last-disabled.gif";  
  185.             this.lbtnNext.Enabled = false;  
  186.             this.lBtnLast.Enabled = false;  
  187.         }  
  188.         else  
  189.         {  
  190.             this.imgNext.Src = "../style/image/page-next.gif";  
  191.             this.imgLast.Src = "../style/image/page-last.gif";  
  192.             this.lbtnNext.Enabled = true;  
  193.             this.lBtnLast.Enabled = true;  
  194.         }  
  195.     }  
  196.   
  197.     //页面显示百分比的调整  
  198.     private void PageShowSize()  
  199.     {  
  200.         this.ReportViewer1.ZoomMode = ZoomMode.Percent;  
  201.         this.ReportViewer1.ZoomPercent = Convert.ToInt32(this.ddlPageSize.SelectedValue);  
  202.         this.ReportViewer1.LocalReport.Refresh();  
  203.         //ReportViewer1.AsyncRendering = false;  
  204.     }  
  205.   
  206.     /// <summary>  
  207.     /// 导出到Excel,PDF  
  208.     /// </summary>  
  209.     /// <param name="sender"></param>  
  210.     /// <param name="e"></param>  
  211.     private void ExportFile(string fileType)  
  212.     {  
  213.         try  
  214.         {  
  215.             Microsoft.Reporting.WebForms.Warning[] Warnings;//警告列表  
  216.             GetData(false);//获取导出文件名称方法  
  217.             string[] strStreamIds;  
  218.             string strMimeType;  
  219.             string strEncoding;  
  220.             string strFileNameExtension;  
  221.             string deviceInfo = SetsPage();  
  222.             string fileName = "unkown";//导出文件名  
  223.   
  224.   
  225.   
  226.             string msType = "";//输出流的HTTP MIME类型  
  227.             string suffix = "";//文件后缀  
  228.             if (fileType.Trim() == "Excel")  
  229.             {  
  230.                 suffix = ".xls";  
  231.                 msType = "application/ms-excel";  
  232.             }  
  233.             if (fileType.Trim() == "PDF")  
  234.             {  
  235.                 suffix = ".pdf";  
  236.                 msType = "application/ms-pdf";  
  237.             }  
  238.             string strFileFolder = "ReportsPrint";// 位于该文件夹  
  239.             // 文件保存的相对路径  
  240.   
  241.   
  242.   
  243.             string strUrlPath = "~/" + String.Format("{0}", strFileFolder);  
  244.             // 文件的相对路径  
  245.   
  246.   
  247.   
  248.             string strMapPath = Server.MapPath(strUrlPath);  
  249.             byte[] bytes = this.ReportViewer1.LocalReport.Render(fileType, deviceInfo, out strMimeType, out strEncoding, out strFileNameExtension, out strStreamIds, out Warnings);  
  250.   
  251.   
  252.             if (reportsinfo.ExportName.Trim() != "")  
  253.                 fileName = reportsinfo.ExportName.Trim() + suffix;  
  254.             else  
  255.                 ShowErroMessage("导出文件名不能为空,请检查!");  
  256.   
  257.             string strFilePath = strMapPath + @"/SaveFile/" + fileName;  
  258.   
  259.             //检查该文件是否已经存在,如果存在则删除  
  260.             DeleteFile(strFilePath);  
  261.   
  262.             using (System.IO.FileStream fileStream = new FileStream(strFilePath, FileMode.Create))  
  263.             {  
  264.                 fileStream.Write(bytes, 0, bytes.Length);  
  265.             }  
  266.             //Response.Write("<mce:script type="text/javascript"><!--  
  267. window.open('" + ResolveUrl("~/ReportsPrint/SaveFile/"+fileName) + "');  
  268. // --></mce:script>");  
  269.   
  270.             Response.Redirect(string.Format("~/ReportsPrint/SaveFile/{0}", fileName), false);  
  271.             /* 
  272.             FileInfo file = new FileInfo(strFilePath); 
  273.              
  274.             Response.Clear(); 
  275.             Response.Charset = "GB2312"; 
  276.              
  277.             Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
  278.             // 添加头信息,为"文件下载/另存为"对话框指定默认文件名  
  279.             Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name)); 
  280.             // 添加头信息,指定文件大小,让浏览器能够显示下载进度  
  281.             Response.AddHeader("Content-Length", file.Length.ToString()); 
  282.  
  283.  
  284.             // 指定返回的是一个不能被客户端读取的流,必须被下载  
  285.             Response.ContentType = msType; 
  286.             // 把文件流发送到客户端  
  287.              
  288.             Response.Redirect(string.Format("~/ReportsPrint/SaveFile/{0}", fileName), false); 
  289.             Response.WriteFile(file.FullName); 
  290.  
  291.             // 停止页面的执行  
  292.             HttpContext.Current.ApplicationInstance.CompleteRequest(); 
  293.             Response.End();*/  
  294.         }  
  295.         catch (Exception ex)  
  296.         {  
  297.             throw new Exception(ex.Message);  
  298.         }  
  299.     }  
  300.   
  301.     //显示报表的具体内容  
  302.   
  303.   
  304.   
  305.     private void ShowReport()  
  306.     {  
  307.         try  
  308.         {  
  309.             string itemid = Request.QueryString["ItemId"].Trim() == null ? "" : Request.QueryString["ItemId"].Trim();  
  310.             string sptwo = Request.QueryString["paramtwo"].Trim() == null ? "" : Request.QueryString["paramtwo"].Trim();  
  311.             string spthree = Request.QueryString["paramthree"].Trim() == null ? "" : Request.QueryString["paramthree"].Trim();  
  312.             string spfour = Request.QueryString["paramfour"].Trim() == null ? "" : Request.QueryString["paramfour"].Trim();  
  313.             string spfive = Request.QueryString["paramfive"].Trim() == null ? "" : Request.QueryString["paramfive"].Trim();  
  314.             string reportName = "";  
  315.             ReportViewer1.Reset();  
  316.               
  317.             //设置为本地报表  
  318.   
  319.   
  320.   
  321.             this.ReportViewer1.ProcessingMode = ProcessingMode.Local;  
  322.             //指定报表路径  
  323.             GetData(false);  
  324.             if (reportsinfo.ReportName.Trim() != "")  
  325.                 reportName = reportsinfo.ReportName.Trim();  
  326.             else  
  327.                 ShowErroMessage("报表名称出错,请检查!");  
  328.             ReportViewer1.LocalReport.ReportPath = MapPath(reportName); //MapPath("ReportStockOrder.rdlc");  
  329.   
  330.             AddDataSource();//绑定数据集  
  331.   
  332.   
  333.   
  334.             ReportParameter pid = new ReportParameter("paramid", itemid);  
  335.             ReportParameter ptwo = new ReportParameter("paramtwo", sptwo);  
  336.             ReportParameter pthree = new ReportParameter("paramthree", spthree);  
  337.             ReportParameter pfour = new ReportParameter("paramfour", spfour);  
  338.             ReportParameter pfive = new ReportParameter("paramfive", spfive);  
  339.             ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { pid, ptwo, pthree, pfour, pfive });  
  340.             this.ReportViewer1.DataBind();  
  341.             ReportViewer1.LocalReport.Refresh();  
  342.             this.ReportViewer1.ShowToolBar = true;  
  343.             this.ReportViewer1.ShowPrintButton = true;  
  344.             this.ReportViewer1.ShowExportControls = false;  
  345.             this.ReportViewer1.ShowPageNavigationControls = true;  
  346.             this.ReportViewer1.ShowFindControls = false;  
  347.             this.ReportViewer1.ShowParameterPrompts = false;  
  348.             this.ReportViewer1.ShowRefreshButton = false;  
  349.             this.ReportViewer1.ShowZoomControl = false;  
  350.         }  
  351.         catch (Exception ex)  
  352.         {  
  353.             throw new Exception(ex.Message);  
  354.         }  
  355.     }  
  356.   
  357.     //导出PDF事件  
  358.     protected void btnPDF_Click(object sender, EventArgs e)  
  359.     {  
  360.         this.ExportFile("PDF");  
  361.     }  
  362.   
  363.     //导出Excel事件  
  364.     protected void btnExcel_Click(object sender, EventArgs e)  
  365.     {  
  366.         this.ExportFile("Excel");  
  367.     }  
  368.   
  369.     //打印事件  
  370.     List<string> imageList = new List<string>();  
  371.     protected void btnPrintSet_Click(object sender, EventArgs e)  
  372.     {  
  373.   
  374.         imageList.Clear();  
  375.         Export();  
  376.         //m_currentPageIndex = 0;  
  377.         //Print();  
  378.         MyStreamDispose();  
  379.         string url = "print.aspx";  
  380.         string param = "";  
  381.         string html = "";  
  382.         foreach (string s in imageList)  
  383.         {  
  384.             if (string.IsNullOrEmpty(param))  
  385.             {  
  386.                 param += s;  
  387.             }  
  388.             else  
  389.             {  
  390.                 param += "|" + s;  
  391.             }  
  392.             html += string.Format("<img src="" + ResolveUrl("~/ReportsPrint/SaveFile/{0}") + "" mce_src="" + ResolveUrl("~/ReportsPrint/SaveFile/{0}") + ""  style="page-break-before: always;" mce_style="page-break-before: always;"  />", s);  
  393.         }  
  394.   
  395.         url += "?image=" + param;  
  396.         //  
  397.         Response.Write("<mce:script type="text/javascript"><!--  
  398. window.open('" + ResolveUrl("~/ReportsPrint/" + url) + "');  
  399. // --></mce:script>");//  
  400.         //Response.Redirect(url);  
  401.     }  
  402.   
  403.     //创建流  
  404.   
  405.   
  406.   
  407.     private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)  
  408.     {  
  409.         imageList.Add(name + "." + fileNameExtension);  
  410.         try  
  411.         {  
  412.             string strFileFolder = "ReportsPrint";// 位于该文件夹  
  413.             // 文件保存的相对路径  
  414.   
  415.   
  416.   
  417.             string strUrlPath = "~/" + String.Format("{0}", strFileFolder);  
  418.             // 文件的相对路径  
  419.   
  420.   
  421.   
  422.             string strMapPath = Server.MapPath(strUrlPath);  
  423.             string strFilePath = strMapPath + @"/SaveFile/" + name + "." + fileNameExtension;  
  424.             DeleteFile(strFilePath);  
  425.   
  426.             FileStream fileStm = new FileStream(strFilePath, FileMode.Create);  
  427.             Stream stream = fileStm;  
  428.             m_streams.Add(stream);  
  429.             return stream;  
  430.         }  
  431.         catch (Exception ex)  
  432.         {  
  433.             throw new Exception(ex.Message);  
  434.         }  
  435.     }  
  436.   
  437.     //导出Image  
  438.     private void Export()  
  439.     {  
  440.         try  
  441.         {  
  442.             string deviceInfo = SetsPage();  
  443.             Microsoft.Reporting.WebForms.Warning[] warnings;  
  444.             m_streams = new List<Stream>();  
  445.             this.ReportViewer1.LocalReport.Render("Image", deviceInfo, CreateStream, out warnings);  
  446.             foreach (Stream stream in m_streams)  
  447.                 stream.Position = 0;  
  448.         }  
  449.         catch (Exception ex)  
  450.         {  
  451.             throw new Exception(ex.Message);  
  452.         }  
  453.     }  
  454.   
  455.     //打印页数设置  
  456.     private void PrintPage(object sender, PrintPageEventArgs ev)  
  457.     {  
  458.         try  
  459.         {  
  460.             Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);  
  461.             ev.Graphics.DrawImage(pageImage, ev.PageBounds);  
  462.   
  463.             m_currentPageIndex++;  
  464.             ev.HasMorePages = (m_currentPageIndex < m_streams.Count);  
  465.         }  
  466.         catch (Exception ex)  
  467.         {  
  468.             throw new Exception(ex.Message);  
  469.         }  
  470.     }  
  471.   
  472.     //打印设置  
  473.     private void Print()  
  474.     {  
  475.         PrintDocument printDoc = new PrintDocument();  
  476.         try  
  477.         {  
  478.             string printerName = "";  
  479.             if (Request[this.ddlPrintSearch.UniqueID].Trim() != "")  
  480.                 printerName = Request[this.ddlPrintSearch.UniqueID];  
  481.             else  
  482.                 printerName = "Microsoft Office Document Image Writer";  
  483.   
  484.             if (m_streams == null || m_streams.Count == 0)  
  485.                 return;  
  486.             printDoc.PrinterSettings.PrinterName = printerName;  
  487.             if (!printDoc.PrinterSettings.IsValid)  
  488.             {  
  489.                 string msg = String.Format("Can't find printer /"{0}/".", printerName);  
  490.                 Console.WriteLine(msg);  
  491.                 return;  
  492.             }  
  493.             GetData(false);//获取导出文件名称方法  
  494.             if ((Convert.ToString(reportsinfo.IsLandscape) == null ? "" : Convert.ToString(reportsinfo.IsLandscape)) != "")  
  495.                 printDoc.DefaultPageSettings.Landscape = reportsinfo.IsLandscape;  
  496.             printDoc.PrintPage += new PrintPageEventHandler(PrintPage);  
  497.             printDoc.Print();  
  498.         }  
  499.         catch (Exception ex)  
  500.         {  
  501.             throw new Exception(ex.Message);  
  502.         }  
  503.         finally  
  504.         {  
  505.             printDoc.Dispose();  
  506.         }  
  507.     }  
  508.   
  509.     //设置页面的尺寸  
  510.   
  511.   
  512.   
  513.     private string SetsPage()  
  514.     {  
  515.         string deviceInfo = "";  
  516.         GetData(false);//获取导出文件名称方法  
  517.         //判断,如果是横向打印则设置页面宽度大于高度,反之高度大于宽度  
  518.         if (reportsinfo.IsLandscape)  
  519.             deviceInfo =  
  520.               "<DeviceInfo>" +  
  521.               "  <OutputFormat>EMF</OutputFormat>" +  
  522.               "  <InteractiveWidth>297mm</InteractiveWidth>" +  
  523.               "  <InteractiveHeight>0mm</InteractiveHeight>" +  
  524.               "  <MarginTop>0.25in</MarginTop>" +  
  525.               "  <MarginLeft>0.25in</MarginLeft>" +  
  526.               "  <MarginRight>0.25in</MarginRight>" +  
  527.               "  <MarginBottom>0.25in</MarginBottom>" +  
  528.               "</DeviceInfo>";  
  529.         else  
  530.             deviceInfo =  
  531.               "<DeviceInfo>" +  
  532.               "  <OutputFormat>EMF</OutputFormat>" +  
  533.               "  <InteractiveWidth>210mm</InteractiveWidth>" +  
  534.               "  <InteractiveHeight>0mm</InteractiveHeight>" +  
  535.               "  <MarginTop>0.25in</MarginTop>" +  
  536.               "  <MarginLeft>0.25in</MarginLeft>" +  
  537.               "  <MarginRight>0.25in</MarginRight>" +  
  538.               "  <MarginBottom>0.25in</MarginBottom>" +  
  539.               "</DeviceInfo>";  
  540.   
  541.         //<InteractiveHeight>0cm</InteractiveHeight>  
  542.         //"  <PageWidth>297mm</PageWidth>" +  
  543.               //"  <PageHeight>210mm</PageHeight>" +  
  544.         //"  <PageWidth>210mm</PageWidth>" +  
  545.         //      "  <PageHeight>297mm</PageHeight>" +  
  546.         return deviceInfo;  
  547.     }  
  548.   
  549.     //注释流列表  
  550.   
  551.   
  552.   
  553.     public void MyStreamDispose()  
  554.     {  
  555.         if (m_streams != null)  
  556.         {  
  557.             foreach (Stream stream in m_streams)  
  558.                 stream.Close();  
  559.             m_streams = null;  
  560.         }  
  561.     }  
  562.   
  563.   
  564.     //页面大小显示事件  
  565.     protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)  
  566.     {  
  567.         ShowReport();  
  568.         PageShowSize();  
  569.     }  
  570.   
  571.     //检查该文件是否已经存在,如果存在则删除  
  572.     private void DeleteFile(string pathStr)  
  573.     {  
  574.         FileInfo file = new FileInfo(pathStr);  
  575.         try  
  576.         {  
  577.             if (file.Exists)  
  578.                 file.Delete();  
  579.         }  
  580.         catch (Exception ex)  
  581.         {  
  582.             throw new Exception(ex.Message);  
  583.         }  
  584.         finally  
  585.         {  
  586.             if (file != null)  
  587.                 file = null;  
  588.         }  
  589.     }  
  590.   
  591.     private void AddDataSource()  
  592.     {  
  593.         try  
  594.         {  
  595.             string type = Request.QueryString["type"].Trim() == null ? "" : Request.QueryString["type"].Trim();  
  596.             if (type.Trim() != "" && Util.IsNumber(type.Trim().ToString()))  
  597.             {  
  598.                 int tp = Convert.ToInt32(type.Trim().ToString());  
  599. //adapters 此adapters为后台查询结果,结果应该与数据集字段相同,才能进行填充  
  600.                 Dictionary<string, SqlDataAdapter> adapters = BizReportsInfo.GetInstance().GetAdapter(tp, Request.QueryString["ItemId"]); ;  
  601.                 switch (tp)  
  602.                 {  
  603.                     case 1:  
  604.                         {  
  605.   
  606.                             ReportInbound.StockOrderDataTable dt = new ReportInbound.StockOrderDataTable();  
  607.                             ReportInbound.StockOrderDetailDataTable dtt = new ReportInbound.StockOrderDetailDataTable();  
  608.                             adapters["DetailAdapter"].Fill(dtt);  
  609.                             adapters["MainAdapter"].Fill(dt);  
  610.                             ReportDataSource rds = new ReportDataSource("ReportInbound_StockOrder", dt);  
  611.                             ReportDataSource rdsd = new ReportDataSource("ReportInbound_StockOrderDetail", dtt);  
  612.                             ReportViewer1.LocalReport.DataSources.Clear();  
  613.                             ReportViewer1.LocalReport.DataSources.Add(rds);  
  614.                             ReportViewer1.LocalReport.DataSources.Add(rdsd);  
  615.                         }  
  616.                         break;  
  617.                     case 2:  
  618.                         {  
  619.                             ReportOutbound.ShipmentOrderDataTable dt = new ReportOutbound.ShipmentOrderDataTable();  
  620.   
  621.         //此处为强类型数据集                 ReportOutbound.ShipmentOrderDetailDataTable dtt = new ReportOutbound.ShipmentOrderDetailDataTable();  
  622.                             adapters["DetailAdapter"].Fill(dtt);  
  623.                             adapters["MainAdapter"].Fill(dt);  
  624.                             ReportDataSource rds = new ReportDataSource("ReportOutbound_ShipmentOrder", dt);  
  625.                             ReportDataSource rdsd = new ReportDataSource("ReportOutbound_ShipmentOrderDetail", dtt);  
  626.                             ReportViewer1.LocalReport.DataSources.Clear();  
  627.                             ReportViewer1.LocalReport.DataSources.Add(rds);  
  628.                             ReportViewer1.LocalReport.DataSources.Add(rdsd);  
  629.                         }  
  630.                         break;  
  631.                                                             default: ShowErroMessage("传入的单据类型没有对应的信息,请检查!");  
  632.                         break;  
  633.                 }  
  634.             }  
  635.             else  
  636.             {  
  637.                 ShowErroMessage("传入的单据类型格式错误,请检查!");  
  638.             }  
  639.         }  
  640.         catch (Exception ex)  
  641.         {  
  642.             throw new Exception(ex.Message);  
  643.         }  
  644.     }  
  645.   
  646.   
  647.     protected void lBtnRefresh_Click(object sender, EventArgs e)  
  648.     {  
  649.         this.ReportViewer1.LocalReport.Refresh();  
  650.     }  
  651.   
  652.     //第一页  
  653.   
  654.   
  655.   
  656.     protected void lBtnFirst_Click(object sender, EventArgs e)  
  657.     {  
  658.         this.ReportViewer1.CurrentPage = 1;  
  659.         PageChange();  
  660.     }  
  661.   
  662.     //下一页  
  663.   
  664.   
  665.   
  666.     protected void lbtnNext_Click(object sender, EventArgs e)  
  667.     {  
  668.         if (this.ReportViewer1.CurrentPage != this.ReportViewer1.LocalReport.GetTotalPages())  
  669.             this.ReportViewer1.CurrentPage++;  
  670.         PageChange();  
  671.     }  
  672.   
  673.     //上一页  
  674.   
  675.   
  676.   
  677.     protected void lBtnPrevious_Click(object sender, EventArgs e)  
  678.     {  
  679.         if (this.ReportViewer1.CurrentPage != 1)  
  680.             this.ReportViewer1.CurrentPage--;  
  681.         PageChange();  
  682.     }  
  683.   
  684.     //最后一页  
  685.   
  686.   
  687.   
  688.     protected void lBtnLast_Click(object sender, EventArgs e)  
  689.     {  
  690.         this.ReportViewer1.CurrentPage = this.ReportViewer1.LocalReport.GetTotalPages();  
  691.         PageChange();  
  692.     }  
  693.     protected void btnReturn_Click(object sender, EventArgs e)  
  694.     {  
  695.         this.ReportViewer1.LocalReport.Dispose();  
  696.         this.ReportViewer1.Dispose();  
  697.         Response.Redirect("../Body.aspx");  
  698.     }  
  699. }  

 

 

5. 更换reportviewcontrol版本,此时的报表控件还不具备打印功能,从官网下载版本为9.0的ReportViewerControl 和sp1补丁,安装好答应按钮就出来了。

 

6。调用打印页

[c-sharp] view plaincopyprint?
  1. protected void lbtnExport_Click(object sender, EventArgs e)  
  2.     {  
  3.         if (!base.CheckAccess((int)AppEnum.Privilege.TransPortOrderPrint))  
  4.         {  
  5.             Response.Redirect("~/Error.aspx");  
  6.         }  
  7.         string shipmentorderid = Request.QueryString["TransportOrderID"].Trim();  
  8.         int type = 15;  
  9.         string ptwo = "";  
  10.         string pthree = "";  
  11.         string pfour = "";  
  12.         string pfive = "";  
  13.         Response.Redirect("../ReportsPrint/ReportView.aspx?type=" + type + "&ItemId=" + shipmentorderid.Trim() + "¶mtwo=" + ptwo.Trim() + "¶mthree=" + pthree.Trim() + "¶mfour=" + pfour.Trim() + "¶mfive=" + pfive.Trim());  
  14.     }  

 

由于一个功能可能好多种打印方式比如打印里和打印所有的,所以在设计报表的时候应该灵活运用参数已达到最佳效果。

0 0
原创粉丝点击