最近开发电子商务系统,里边用到报表打印,批量打出订单,以前没有接触过报表,更别说打印了,今天搞定后,那来与大家交流。
源代码如下:
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
 26function 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:
  1using System;
  2using System.Data;
  3using System.Configuration;
  4using System.Collections;
  5using System.Web;
  6using System.Web.Security;
  7using System.Web.UI;
  8using System.Web.UI.WebControls;
  9using System.Web.UI.WebControls.WebParts;
 10using System.Web.UI.HtmlControls;
 11
 12using System.Drawing;
 13using System.ComponentModel;
 14using EMCCommerce.Framework;
 15using CrystalDecisions.Shared;
 16using CrystalDecisions.CrystalReports.Engine;
 17using System.Drawing.Printing;
 18
 19public 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
posted on 2008-01-23 10:12  沉默的心  阅读(1997)  评论(0编辑  收藏  举报