【原创】Crystal report 实现打印-网站开发手记

最近开发电子商务系统,里边用到报表打印,批量打出订单,以前没有接触过报表,更别说打印了,今天搞定后,那来与大家交流。
源代码如下:
aspx:
  1 <% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " ReceiptViewer.aspx.cs "  Inherits = " ReceiptViewer "  MasterPageFile = " ~/themes/default/layout/Simple.master "   %>
  2
  3 <% @ Register Assembly = " CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304 "
  4     Namespace = " CrystalDecisions.Web "  TagPrefix = " CR "   %>
  5 < asp:Content ID = " Content1 "  ContentPlaceHolderID = " ContentPlaceHolder1 "  Runat = " Server " >
  6   < script language = " javascript " >
  7  function checkAll(oEle)
  8 {
  9    var checked = oEle.checked;
 10    while(oEle.tagName!="TABLE")
 11    {
 12       // oEle = oEle.parentElement;
 13        oEle = oEle.parentNode;
 14    }

 15    
 16    var checkBoxs  = oEle.getElementsByTagName("INPUT");
 17    for(var i=0;i<checkBoxs.length;i++)
 18    {
 19        if(checkBoxs[i].type=="checkbox")
 20        {
 21            checkBoxs[i].checked = checked;
 22        }

 23    }

 24}

 25
 26 function checkSelectList()
 27 {
 28    var selectList="";
 29    var tbList=document.getElementsByName("tbOrderList");
 30    var chkList=document.getElementsByTagName("INPUT");
 31    if(chkList==nullreturn false;
 32    var length=chkList.length;
 33   
 34    for(i=0;i<length-2;i++)
 35    {
 36        if(chkList[i].type=="checkbox" && chkList[i].checked)
 37        {
 38            var objOrderId=chkList[i].nextSibling;
 39            if(objOrderId.type!="hidden"continue;
 40//            var objOrderId=objReference.nextSibling;
 41//            if(objOrderId.type!="hidden") continue;
 42            
 43//            if(objReference.type=="hidden" && objReference.value!="")
 44//            {
 45//                failed = true;
 46//            }
 47            if(objOrderId.type="hidden")
 48            {
 49                if (selectList != ""
 50                {
 51                    selectList=selectList+",";            
 52                }

 53                
 54                 selectList = selectList+objOrderId.value;
 55            }

 56        }

 57    }

 58    if(selectList=="")
 59    {
 60        alert("Please select order to print.");
 61        return false;
 62    }

 63    else
 64    {
 65        var hidList=document.getElementById("ctl00_ContentPlaceHolder1_hidOrderList");
 66        hidList.value=selectList;
 67        return true;
 68    }

 69}

 70   </ script >
 71  
 72     < asp:panel id = " panToolBar "  runat = " server "  Wrap = " False "  Height = " 5px " >
 73 < asp:LinkButton id = " LinkButbtnRefresh "  runat = " server "  OnClick = " LinkButbtnRefresh_Click " > [Refresh] </ asp:LinkButton >& nbsp; 
 74 < asp:HyperLink id = " hlBack "  runat = " server " > [Back] </ asp:HyperLink >
 75         < asp:Button ID = " btShowPrint "  CssClass = " buttondark "  runat = " server "  OnClick = " btShowPrint_Click "  Text = " [Show Print Option] "   />
 76         < asp:Button ID = " btPrint "   CssClass = " buttondark "  runat = " server "  Text = " Print "  OnClientClick = " return checkSelectList(); "  OnCommand = " btPrint_Command "   />
 77    < asp:HiddenField ID = " hidOrderList "  runat = " server "   />
 78         < asp:HiddenField ID = " hidPrinterName "  runat = " server "   />   
 79         < asp:HiddenField ID = " hidPrintCopies "  runat = " server "   />   
 80    </ asp:panel >
 81      < asp:Panel ID = " panPrint "  Visible = " false "  runat = " server "  Height = " 50px "  Width = " 50% " >
 82          < asp:DropDownList ID = " ddlPrinter "  runat = " server " >
 83          </ asp:DropDownList >
 84          < br  />
 85         Print  < asp:TextBox ID = " txtCopies "  Width = " 50px "  Text = " 1 "   runat = " server " ></ asp:TextBox > Copies.
 86          < asp:RequiredFieldValidator ID = " RequiredFieldValidator1 "  runat = " server "  
 87          ControlToValidate = " txtCopies "  ValidationGroup = " vPrint "
 88         ErrorMessage = " Please input a number of copies to print. " ></ asp:RequiredFieldValidator >
 89          < asp:RangeValidator ID = " RangeValidator1 "  runat = " server "  MaximumValue = " 1000 "  MinimumValue = " 1 "
 90          ControlToValidate = " txtCopies "
 91         ErrorMessage = " Must be a number over 1 "  ValidationGroup = " vPrint " > .
 92          </ asp:RangeValidator >  
 93          < br  />
 94 < asp:Button ID = " btConrirm "   CssClass = " buttondark "  runat = " server "  Text = " Confirm "  OnCommand = " btConfirm_Command "   /></ asp:Panel >
 95 < CR:CrystalReportViewer id = " rptViewer "  runat = " server "  Width = " 350px "  Height = " 50px "  PageToTreeRatio = " 5 "  EnableDatabaseLogonPrompt = " False "  EnableDrillDown = " False "  EnableParameterPrompt = " False "  AutoDataBind = " True "  PrintMode = " ActiveX "  DisplayGroupTree = " False " />
 96      < br  />
 97      < table cellspacing = " 1 "  id = " tbOrderList "   class = " listtable "  cellpadding = " 0 " >
 98      < asp:Repeater ID = " rpOrderList "  runat = " server "  OnItemDataBound = " rpOrderListItemBound " >
 99      < HeaderTemplate >
100      < tr >
101      < th >
102          < input type = " checkbox "  id = " chkAll "  onclick = " checkAll(this); "  title = " Select All " />< label style = " display:inline; "   for = " chkAll " > Select All </ label >
103          </ th >
104      < th > Header1 </ th >
105      < th > Header2 </ th >
106      < th > Header3 </ th >
107      < th > Header4 </ th >
108      < th > Header5 </ th >
109      < th > Header6 </ th >
110      < th > Header7 </ th >
111      < th > Header8 </ th >
112      </ tr >
113      </ HeaderTemplate >
114      < ItemTemplate >
115     
116 <!--  这里牵涉到公司机密,就不show了,内容只是为了显示一个列表,让用户选择打印那些订单 -->
117      </ ItemTemplate >
118      </ asp:Repeater >
119 </ table >
120 </ asp:Content >

cs:
  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.WebParts;
 10 using  System.Web.UI.HtmlControls;
 11
 12 using  System.Drawing;
 13 using  System.ComponentModel;
 14 using  EMCCommerce.Framework;
 15 using  CrystalDecisions.Shared;
 16 using  CrystalDecisions.CrystalReports.Engine;
 17 using  System.Drawing.Printing;
 18
 19 public   partial   class  ReceiptViewer : BasePage
 20 {
 21    public struct qsReceipt
 22    {
 23        public const string Receipt = "rpt";
 24    }

 25         private const string GROUP_TREEV_HIDE = "[Hide Tree View]";
 26    private const string GROUP_TREEV_SHOW = "[Show Tree View]";
 27    private const string PRINT_SHOW = "[Show Print Option]";
 28    private const string PRINT_HIDE = "[Hide Printing Panel]";
 29
 30    private CrystalDecisions.CrystalReports.Engine.ReportDocument rptDoc;
 31
 32    protected void Page_Load(object sender, EventArgs e)
 33    {
 34        if (!IsPostBack)
 35        {
 36            //remember the referal
 37            if (null != Request.UrlReferrer && Request.UrlReferrer.Host == Request.Url.Host)
 38            {
 39                hlBack.NavigateUrl = Request.UrlReferrer.PathAndQuery;
 40                hlBack.Visible = true;
 41            }

 42            else
 43            {
 44                hlBack.Visible = false//can't provide this feature.
 45            }

 46            //load report
 47            //InitLoadReport();
 48            LoadOrderList();
 49            //Print();
 50//panPrint.Visible = false;
 51        }

 52        else
 53        {
 54            LoadCachedReport();
 55        }

 56        //btnGroupTree.Text = (rptViewer.DisplayGroupTree ? GROUP_TREEV_HIDE : GROUP_TREEV_SHOW);            
 57    }

 58
 59    //private void FillRptParamsFromReq()
 60    //{
 61    //    ParameterFieldDefinitions Parms = rptDoc.DataDefinition.ParameterFields;
 62    //    ParameterFieldDefinition paramField; 
 63    //    for (int i = 0; i < rptDoc.DataDefinition.ParameterFields.Count; i++)
 64    //    {
 65    //        paramField = rptDoc.DataDefinition.ParameterFields[i];
 66    //    //Response.Write(Utils.Cstr(Request[paramField.ParameterFieldName], ""));
 67    //    //Response.End();
 68    //        if (Request.Params[paramField.ParameterFieldName] != null)
 69    //        {
 70    //            rptDoc.SetParameterValue(i, Utils.Cstr(Request[paramField.ParameterFieldName], ""));
 71    //        }
 72    //        else
 73    //        {
 74    //            string val;
 75    //            val = "";
 76    //            rptDoc.SetParameterValue(i, val);
 77    //        }
 78    //    }
 79    //}
 80    private void FillRptParamsFromReq(params string[] paravalue)
 81    {
 82        ParameterFieldDefinitions Parms = rptDoc.DataDefinition.ParameterFields;
 83        ParameterFieldDefinition paramField;
 84        for (int i = 0; i < rptDoc.DataDefinition.ParameterFields.Count; i++)
 85        {
 86            paramField = rptDoc.DataDefinition.ParameterFields[i];
 87            //Response.Write(Utils.Cstr(Request[paramField.ParameterFieldName], ""));
 88            //Response.End();
 89            //if (Request.Params[paramField.ParameterFieldName] != null)
 90            if (paravalue[i] != null)
 91            {
 92                rptDoc.SetParameterValue(i, Utils.Cstr(paravalue[i], ""));
 93            }

 94            else
 95            {
 96                string val;
 97                val = "";
 98                rptDoc.SetParameterValue(i, val);
 99            }

100        }

101    }

102
103    private void InitLoadReport()
104    {
105        try
106        {
107            string reportFilePath = Server.MapPath(@"报表路径");
108            rptDoc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
109            rptDoc.Load(reportFilePath);
110
111            //init connection
112            InitRptConnection(连接字符串);
113            //FillRptParamsFromReq();
114            //assign source
115            //rptViewer.ReportSource = rptDoc;
116            //rptViewer.RefreshReport(); //remove it in VS2005 or error.
117
118            //fill up Parameters
119
120            //cache this report
121            Session[CACHED_RPT] = rptDoc;
122            Session[CACHED_RPT_NAME] = Request[qsReceipt.Receipt];
123            /**//*}
124            else
125            {//redirect to the default page
126                //Response.Redirect( "default.aspx" );
127                //Response.End();
128            }*/

129        }

130        catch (Exception e1)
131        {
132            Response.Write(e1.ToString());
133            Response.End();
134        }

135    }

136
137    private void LoadCachedReport()
138    {
139        string cachedRpt = Utils.Cstr(Session[CACHED_RPT_NAME], string.Empty);
140        string qRpt = Utils.Cstr(Request[qsReceipt.Receipt], string.Empty);
141        if (cachedRpt.Length > 0 && cachedRpt == qRpt)
142        {
143            rptDoc = (CrystalDecisions.CrystalReports.Engine.ReportDocument)Session[CACHED_RPT];
144            //rptViewer.ReportSource = rptDoc;
145        }

146        else
147        {
148            InitLoadReport();
149        }

150    }

151
152
153    private void InitRptConnection(string conn)
154    {
155        //break the connection string
156        string[] parms = conn.Split(new char[] ';' });
157        Dictionary connD = new Dictionary();
158        for (int i = 0; i < parms.Length; i++)
159        {
160            if (parms[i].Trim().Length < 1continue;
161            string[] pair = parms[i].Split(new char[] '=' });
162            if (pair.Length > 1)
163            {
164                connD[pair[0]] = pair[1];
165            }

166        }

167
168        string u, p, s, d;
169        u = connD["UID"].ToString();
170        p = connD["PWD"].ToString();
171        s = connD["Server"].ToString();
172        d = connD["Database"].ToString();
173        string constr = string.Format("UID={0};PWD={1};Server={2};DataBase={3}",u,p,s,d);
174        rptDoc.SetDatabaseLogon(u, p);
175        //rptDoc.SetDatabaseLogon(u, p, s, d);  //not working. login fail with this one
176        return;
177
178        
179            }

180    
181
182       protected void LinkButbtnRefresh_Click(object sender, System.EventArgs e)
183    {
184        InitLoadReport();
185    }

186
187    private void showPrint()
188    {
189        ddlPrinter.Items.Clear();
190        foreach (string ptr in PrinterSettings.InstalledPrinters)
191        {
192            ddlPrinter.Items.Add(ptr);
193        }

194        panPrint.Visible = true;
195        //lbPrintError.Visible = false;
196        //lbPrintResult.Visible = false;
197    }

198
199    private void SetPrinter(string printerName)
200    {
201        rptDoc.PrintOptions.PrinterName = printerName;
202    }

203
204    protected void btPrint_Command(object sender, CommandEventArgs e)
205    {
206        string orderList = this.hidOrderList.Value.Trim();
207        string message = "";
208        int copies = Convert.ToInt32(string.IsNullOrEmpty(hidPrintCopies.Value)?"1":hidPrintCopies.Value);
209        if (string.IsNullOrEmpty(orderList)) return;
210        string[] orderLists = orderList.Split(',');
211        foreach (string order in orderLists)
212        {
213            FillRptParamsFromReq(new string[] {order});
214            try
215            {
216            if (string.IsNullOrEmpty(hidPrinterName.Value))
217                this.hidPrinterName.Value = PrinterSettings.InstalledPrinters[0];
218            SetPrinter(hidPrinterName.Value);
219            rptDoc.PrintToPrinter(copies, true00);
220            }

221            catch (Exception ex)
222            {
223                message = ex.Message;
224            }

225        }

226        if (string.IsNullOrEmpty(message))
227            message = "Order: " + orderList + " Print Successfully.";
228        Response.Write("<script>alert('" + message + "');</script>");
229    }

230
231    protected void btConfirm_Command(object sender,CommandEventArgs e)
232    {
233        this.hidPrinterName.Value = this.ddlPrinter.SelectedValue;
234        this.hidPrintCopies.Value = this.txtCopies.Text;
235        this.panPrint.Visible = false;
236        this.btShowPrint.Text = (panPrint.Visible ? PRINT_HIDE : PRINT_SHOW);
237    }

238
239    protected void btShowPrint_Click(object sender, EventArgs e)
240    {
241        if (!panPrint.Visible)
242            showPrint();
243        else
244            hidePrint();
245
246        this.btShowPrint.Text = (panPrint.Visible ? PRINT_HIDE : PRINT_SHOW);
247    }

248
249    private void hidePrint()
250    {
251        panPrint.Visible = false;
252    }

253
254    private void LoadOrderList()
255    {
256//LoadReport show in the page 
257    }

258     
259}

260

转载于:https://www.cnblogs.com/neilvension/archive/2008/01/23/1049641.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值