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

news/2024/5/20 4:02:54/文章来源:https://blog.csdn.net/weixin_30398227/article/details/98991830
最近开发电子商务系统,里边用到报表打印,批量打出订单,以前没有接触过报表,更别说打印了,今天搞定后,那来与大家交流。
源代码如下:
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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_715547.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恐怖绝伦,SOPA和PIPA捅了网站窝!

今天刚一上外网&#xff0c;愕然发现N个网站同时出现了类似如下文字&#xff1a;Join the largest online protest in history: tell the US Congress to stop SOPA and PIPA now! 粗译成中文&#xff0c;即&#xff1a;加入有史以来最大的网上抗议&#xff0c;告诉美国国会&am…

stack overflow--技术问答网站

转自&#xff1a;http://baike.baidu.com/link?urleMR6Pwdk9IkauI5B3nZb2Yo3VUAcK6vQfrMpcSMPWqgH0ngqFkup3Gdr3t_s_yZe_UFwkR8c1pboaxhEuY-iwF_nGiUYHajEPMO6Y1kqWvT8aPz7a_T6t3a1vxyTccgKl_UIx1cU-6IP7qjre2ijtq Stack Overflow是一个与程序相关的IT技术问答网站。用户可以在…

多媒体开发之分场图像和交错图像interlacing---一个破解版的迅雷云点播网站

[-] 目录编辑描述编辑去交错方法编辑去交错源自电影的影像编辑去交错交错式影像编辑单一场去交错intra-field deinterlacing编辑场间去交错inter-field deinterlacing编辑动态适应性去交错motion adaptive deinterlacing编辑动态补偿去交错motion compensated deinterlacing编辑…

在RHEL5下构建LAMP网站服务平台之架设Discuz!论坛

安装Discuz!论坛程序所需安装包&#xff1a;Discuz_6.1.0_SC_UTF8.zip 和 UCenter_1.0.0_SC_UTF8.zip源码包下载地址&#xff1a;http://www.discuz.net 1.建立用于bbs论坛的数据库bbsdb及用户linux5234&#xff1a;#mysql -u root -p mysql>create database bbsdb; my…

PS网页设计教程III——在Photoshop中设计优雅的网站布局设计

作为编码者&#xff0c;美工基础是偏弱的。我们可以参考一些成熟的网页PS教程&#xff0c;提高自身的设计能力。套用一句话&#xff0c;“熟读唐诗三百首&#xff0c;不会作诗也会吟”。 本系列的教程来源于网上的PS教程&#xff0c;都是国外的&#xff0c;全英文的。本人尝试翻…

网站性能愈来愈差怎么办?

新的一年&#xff0c;你的老板或客户&#xff0c;是否曾和你抱怨公司的网站性能愈来愈差&#xff1f;网站大家都会写&#xff0c;自从有了 Visual Studio 之后&#xff0c;连你家楼下的正妹小喵和隔壁的王大婶都会写 ASP.NET。但同样的一个画面&#xff0c;背后的性能却可能是天…

欢迎访问我的个人网站

2019独角兽企业重金招聘Python工程师标准>>> 欢迎访问我的个人网站&#xff1a;肖国栋的 i 自留地。 由于两边更新比较麻烦&#xff0c;一些修改不再同步到这边。 转载于:https://my.oschina.net/goldenshaw/blog/875030

大型网站的 HTTPS 实践(二):HTTPS 对性能的影响

大型网站的 HTTPS 实践&#xff08;二&#xff09;&#xff1a;HTTPS 对性能的影响 1 前言 HTTPS 在保护用户隐私&#xff0c;防止流量劫持方面发挥着非常关键的作用&#xff0c;但与此同时&#xff0c;HTTPS 也会降低用户访问速度&#xff0c;增加网站服务器的计算资源消耗。 …

通过pfSense阻止对某个网站的访问

防火墙阻止对某个网站的访问是基本功能&#xff0c;在pfSense上阻止对某个网站的访问&#xff0c;通常可以通过别名和设置防火墙规则来完成。在本例中&#xff0c;我们来尝试阻止对新浪网&#xff08;www.sina.com&#xff09;的访问。查找域名解析地址添加别名设置防火墙规则检…

HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版

《HTML5CSS3jQuery Mobile轻松构造APP与移动网站》以HTML与CSS为主&#xff0c;配合jQuery制作网页&#xff0c;并搭配jQueryMobile制作移动网页&#xff0c;通过具体的范例从基础到高级循序渐进地讲解。全书首先介绍了HTML5网页开发和CSS网页美化&#xff0c;只要按本书的顺序…

如何在最段的时间内让搜索引擎收录一个新网站?

对于搜索引擎收录新网站真的没有一个准确的时间&#xff0c;有时快有时慢&#xff0c;快的建站当天就收录&#xff0c;慢的几个月都不被收录。虽然收录有快有慢&#xff0c;但我们也可以通过操作来加快搜索引索的收录。下面总结了一些方法或是技巧供大家参考&#xff01; 一、网…

Flickr 网站架构分析

1234567891011。。。。。。。。。。。。。。 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_http_module modules/mod_proxy_http.so 。。。。。。。。。。。。。。。。。。。。 <Proxy …

Linux快速构建LAMP网站平台

1.1 问题本例要求基于Linux主机快速构建LAMP动态网站平台&#xff0c;并确保可以支撑PHP应用及数据库&#xff0c;完成下列任务&#xff1a; 1&#xff09;安装LAMP平台各组件&#xff0c;启动LAMP平台 软件包&#xff1a;httpd、mariadb-server、mariadb、php、php-mysql系统服…

php主页备案号底部中间,如何获取公安备案号?如何将公安备案号放到网站底部?...

一、网站公安备案显示&#xff1a;网站通过了公安局备案后需要将“网站公安机关备案编号及图标”放到网站底部&#xff0c;本教程将详细指导如何操作。效果图&#xff1a;二、获取公安备案号及链接通过了公安备案后&#xff0c;获取备案编号及链接的方法&#xff1a;登录公安机…

配置Apache虚拟主机,实现在一台服务器上运行多个网站

Apache虚拟主机实现有三种方法&#xff1a;1、通过不同的IP地址2、通过不同的域名3、通过不同的端口号1、通过不同的IP地址&#xff0c;解析不同的域名&#xff08;1&#xff09;给服务器增加IP&#xff08;另一个域名解析&#xff09;[roothttp ~]# ifconfig eth0:1 192.168.2…

如何下载一些网站本身不希望你下载的文件呢

如一些学习视频之类&#xff0c;如何下载呢&#xff0c;本文主要针对一些非程序员朋友&#xff0c;对于程序员朋友其实稍微模式点的就是下面提到的右击&#xff0c;复制下载地址 其实很简单&#xff0c;打开对应的网站&#xff0c;按F12&#xff0c;浏览器下方就会弹出一个好玩…

不可忽视的力量,插件主题网站

在当前Web2.0时代&#xff0c;Blog&#xff0c;RSS&#xff0c;Wiki等服务充斥着整个互联网。近日&#xff0c;用户个性化定制搜索巨头Google宣布&#xff0c;将向Web 开发人员开放Gadget框架&#xff0c;使其能够在自己的网页上增添Universal Gadget。 这意味这用户可以根据自…

麻烦大家反馈一下昨天的网站访问速度

昨天是我们使用阿里云RDS之后&#xff0c;经历访问高峰期的第一天&#xff0c;麻烦大家反馈一下昨天访问园子的速度&#xff08;尤其是博客站点&#xff09;。 从我们观察的情况看&#xff0c;RDS表现不错。但在16:01与16:46两个时间点出现了RDS数据库连接数突增的情况&#xf…

如何让你的网站用discuz插件变的有力量

2019独角兽企业重金招聘Python工程师标准>>> 有段时间&#xff0c;我们的网站访问量经历了以下三个阶段&#xff1a; 上线第一个月&#xff1a;迅速增长 2-4个月&#xff1a;保持平稳 5-6个月&#xff1a;访问量降低&#xff0c;日活跃度降低 之后我们做了几个动作&…

Google Analytics(分析)-的Blog/网站流量分析器

如果你想要知道你Blog的访问者是如何找到你以及他们是如何与你的Blog/网站互动的&#xff0c;Google Analytics(分析)可以告诉你所有相关信息。由此&#xff0c;你可以将自己的营销资源集中于能够带来投资回报的广告系列和活动上&#xff0c;并且改进自己的Blog/网站以促进更多…