报表打印(rdlc)

1首先在你的项目中要添加一个报表文件(扩展名为rdlc)

然后通过VS的可视化对其进行控件的添加和布局

如图:

其中的textbox的位置都是以厘米为单位的
对打印来说非常方便

2针对报表添加一系列的参数
如图:

3打印相关的工具类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Reporting.WinForms;
using FB.Entity;
using FB.Helper;
using System.Windows.Forms;

namespace FB.PrintHelper
{
    public class PrintUtils
    {
        public static string PrintPaper(ContractTicket ticket, ContractOrder order, ReportViewer reportViewer1)
        {
            bool flag = false;
            ReportParameter[] rps = new ReportParameter[]
            {
            new ReportParameter("UserName"),
            new ReportParameter("CardNum"),
            new ReportParameter("StartPlace"),
            new ReportParameter("EndPlace"),
            new ReportParameter("FlightName"),
            new ReportParameter("FlightId"),

            new ReportParameter("SeatClass"),
            new ReportParameter("FlyDate"),
            new ReportParameter("FlyTime"),
            new ReportParameter("TicketNum"),//客票级别
            new ReportParameter("PaperNum"),//电子客票号
            new ReportParameter("VerifyNum"),//行程单号

            new ReportParameter("TicketPay"),
            new ReportParameter("AirPortTax"),
            new ReportParameter("TotalPay"),
            new ReportParameter("SafePay"),
            new ReportParameter("CreateDate"),
            new ReportParameter("EndPlace1"),

            new ReportParameter("FlightName1"),
            new ReportParameter("FlightId1"),
            new ReportParameter("SeatClass1"),
            new ReportParameter("FlyDate1"),
            new ReportParameter("FlyTime1"),
            new ReportParameter("TicketNum1"),

            new ReportParameter("ranyou"),
            new ReportParameter("PNR"),
            new ReportParameter("NewWeight")

            };
            StringBuilder sb = new StringBuilder();
            foreach (ContractPassenger P in ticket.Passengers)
            {
                foreach (var r in rps)
                {
                    r.Values.Clear();
                }
                //用户名
                rps[0].Values.Add(P.UserName);
                //用户证件号码
                rps[1].Values.Add(P.Z_ID);
                //起飞城市
                rps[2].Values.Add(Utils.SplitStr(ticket.StartPoint, '#', flag) + "  " + Utils.SplitStr(ticket.AirSC, '#', flag));
                //终点城市
                rps[3].Values.Add(Utils.SplitStr(ticket.EndPoint, '#', flag) + "  " + Utils.SplitStr(ticket.AirSE, '#', flag));
                //承运人
                rps[4].Values.Add(Utils.SplitStr(ticket.Flight_ID, '#', flag).Substring(0, 2));
                //航班号
                rps[5].Values.Add(Utils.SplitStr(ticket.Flight_ID, '#', flag).Substring(2, 4));
                //座位等级
                rps[6].Values.Add(Utils.SplitStr(ticket.CabinType, '#', flag).Split('(')[1].Substring(0, 1));
                //起飞日期
                string[] str = Utils.SplitStr(ticket.FlightDate, '#', flag).Split('-');
                rps[7].Values.Add(str[2]+Utils.mmonth(str[1]));
                //起飞时间
                rps[8].Values.Add(Utils.SplitStr(ticket.FlightTime, '#', flag).Replace(":", ""));
                //客票级别
                rps[9].Values.Add(rps[6].Values[0] + "/" + Utils.SplitStr(ticket.AirSE, '#', flag) + str[0] +"N20");
                //保险费
                if (P.UserBorn == "1")
                {
                    if (ticket.StartPoint.Contains('#'))
                    {
                        rps[15].Values.Add("40.00");
                    }
                    else
                    {
                        rps[15].Values.Add("20.00");
                    }
                }
                else
                {
                    rps[15].Values.Add("xxx");
                }
                //添开日期
                rps[16].Values.Add(DateTime.Now.ToShortDateString());
                if (ticket.StartPoint.Contains('#'))
                {
                    flag = true;
                    //终点城市
                    rps[17].Values.Add(Utils.SplitStr(ticket.EndPoint, '#', flag) + "  " + Utils.SplitStr(ticket.AirSE, '#', flag));
                    //承运人
                    rps[18].Values.Add(Utils.SplitStr(ticket.Flight_ID, '#', flag).Substring(0, 2));
                    //航班号
                    rps[19].Values.Add(Utils.SplitStr(ticket.Flight_ID, '#', flag).Substring(2, 4));
                    //座位等级
                    rps[20].Values.Add(Utils.SplitStr(ticket.CabinType, '#', flag).Split('(')[1].Substring(0, 1));
                    //起飞日期
                    str = Utils.SplitStr(ticket.FlightDate, '#', flag).Split('-');
                    rps[21].Values.Add(str[2] + Utils.mmonth(str[1]));
                    //起飞时间
                    rps[22].Values.Add(Utils.SplitStr(ticket.FlightTime, '#', flag).Replace(":", ""));
                    //客票级别
                    rps[23].Values.Add(rps[20].Values[0] + "/" + Utils.SplitStr(ticket.AirSE, '#', flag) + str[0] + "N20");
                    //行礼重量
                    rps[26].Values.Add("20k");
                }
                string[] arr = P.PnrText.Split('$');
                //单价
                rps[12].Values.Add("CNY  " + arr[0]);
                //机建
                if (!string.IsNullOrEmpty(arr[1]))
                {
                    rps[13].Values.Add("CN   " + arr[1]);
                }
                else
                {
                    rps[13].Values.Add("EXEMPT");
                }
                //燃油
                if (!string.IsNullOrEmpty(arr[2]))
                {
                    rps[24].Values.Add("CN   " + arr[2]);
                }
                else
                {
                    rps[24].Values.Add("EXEMPT");
                }
                //行程单后四位
                if(!string.IsNullOrEmpty(arr[3]))
                {
                    rps[11].Values.Add(arr[3].Substring(arr[3].Length - 4));
                }
                //电子客票号
                rps[10].Values.Add(arr[4]);
                //PNR
                rps[25].Values.Add(P.PNR);
                //合计
                rps[14].Values.Add("CNY  " + P.Price);
                //不能让他打印空数据
                foreach (ReportParameter p in rps)
                {
                    if (p.Values.Count < 1)
                    {
                        p.Values.Add("  ");
                    }
                }
                reportViewer1.LocalReport.SetParameters(rps);
                reportViewer1.RefreshReport();
                reportViewer1.Refresh();
                StreamPrintDocument printDoc;

                try
                {
                    printDoc = new StreamPrintDocument(reportViewer1.LocalReport);
                    printDoc.Print();
                    sb.AppendFormat("{0}的行程单打印成功\n", P.UserName);
                }
                catch
                {
                    sb.AppendFormat("{0}的行程单打印失败\n", P.UserName);
                }
                printDoc = null;
            }
            return sb.ToString();
        }
    }
}

 

4调用此工具函数的相关代码

                    Microsoft.Reporting.WinForms.ReportViewer reportViewer1 = new Microsoft.Reporting.WinForms.ReportViewer();
                    reportViewer1.LocalReport.ReportEmbeddedResource = "FB.Client.Report1.rdlc";
                    string message = PrintUtils.PrintPaper(ticket, order, reportViewer1);
                    MessageBox.Show(message);

 

5打印工具类涉及到的组件和驱动函数
用到了蜡人张的RDLC报表系列所说的知识
RDLC报表

此处就直接提供下载地址:http://files.cnblogs.com/liulun/FB.PrintHelper.rar

 

时间: 2024-11-02 18:30:00

报表打印(rdlc)的相关文章

Asp.Net的Web开发中rdlc报表打印问题

问题描述 有两台电脑使用Rdlc报表打印时不能正常打印,点击打印按钮,提示"errorLoadingresourcelibrary.(0x8007007E)",浏览器IE操作系统XP,这台电脑前两天还能正常打印.另一电脑点击打印按钮,提示"打印时出错(0x80070006)",浏览器IE操作系统Win7,各位大侠帮忙解决下.万分感谢! 解决方案 解决方案二:查一下错误代码:0x80070006.

VS2010 Rdlc报表打印问题!

问题描述 遇到一个RDLC报表打印的问题,请求大家给予支持目前做了一个报表打印,设置报表-报表属性-布局中的页面宽度:21cm页面高度:9cm报表主体属性中Size18.5cm,5cm打印结果是竖的.可加QQ:4983187 解决方案 解决方案二:顶一个,希望有类似情况的,给个解决方案解决方案三:求给力.求解...........解决方案四:这个能调吧你条准确了就没问题了吧解决方案五: 解决方案六:你是不是想把它打印出来的结果是居中?问题没有描述清楚..解决方案七:你是不是想把它打印出来的结果是

利用XML实现通用WEB报表打印实际使用中的例子

web|xml|报表打印 最近做的一个B/S项目,在打印时采用了在IE中嵌入.net winform控件和XML结合的方式(参见http://www.yesky.com/20030214/1652186.shtml),在实际应用过程中,有一些心得,和大家分享.(一).使用通用模版格式化XML文件系统中共用到了三种单据,分别为出库单,入库单,送货单,因此,定义三个模版文件,格式如下:chukudan.xsl:<?xml version="1.0" encoding="GB

ASP.NET应用XML技术实现Web报表打印

XML主要用来描述打印报表的名称,数据来源,格式,分页打印等信息,具体标签可自己定义,下面是笔者针对会员管理系统报表打印所制定的XML文档: Memberlist.xml 〈xml version="1.0" encoding="utf-8" > 〈XmlReport> 〈Page> 〈Title>Member information〈/Title> 〈ApplyXSLT>〈/ApplyXSLT> 〈/Page> 〈R

讨论创建基于WSE的报表打印服务及其实现

报表打印|创建|报表打印 摘要:看过卢彦先生的关于WEB报表打印实现文章的人,一定会为里面所提供的解决方案击节叫好,本文试图给大家展现一个更灵活的打印作业流水,并具有一定的实用性.建议大家在阅读本文之前先阅读卢彦先生的两篇文章,同时本文采用了微软的WSE(1.0)作为辅助工具,对此感到陌生的朋友,建议先参考一些概念性的文章,我在文章的最后列了一些参考资料和所需工具,大家可自行体会. ---------------------------------------------------------

Access报表打印——自动分页

access|报表打印|分页 Access报表打印--自动分页   问题: 每页打印一定行数后自动分页  方法一: 加一个分页符,在报表的代码界面里面写入以下代码:Option Compare DatabaseDim row As LongDim RowsInPage As IntegerPrivate Sub 主体_Format(Cancel As Integer, FormatCount As Integer)    RowsInPage = 7    row = row + 1    If

使用jsp实现word、excel格式报表打印

excel|js|word|报表打印 因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为Web页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式 word页面只要在jsp头设置如下指令:<%@page contentType="application/msword;charset=GBK" %> excel如下:<%@page contentType="application

JSP报表打印的一种简单解决方案

js|报表打印|解决        1. 在Word或Excel中制作报表的样式. Excel的行高和列宽单位无法用mm或cm表示. 需要计算.在1024*768下,1CM约为38像素. 以此为基准,可计算并控制报表的行列位置. 2. 在Word中设置"表格--标题行重复". 在Excel中设置"文件--页面设置--工作表--打印标题". 3. 另存为网页,改后缀名"htm"为"jsp". 4. Word报表文件头为: <

在WEB应用中报表打印的实现

web|报表打印 WEB应用中报表打印的实现 随着世界范围内Internet环境的形成,全球正进入一个以网络为中心的计算时代.Web模型是在传统的C/S模型的基础上发展起来的一种新的Browser/Server计算模式.Browser/Server模型简化了C/S中的客户端,客户端只需装上操作系统.网络协议软件及浏览器:而服务器端则集中了所有的应用逻辑,开发.维护等几乎所有工作也都集中在服务器端.这时的客户机被称为瘦客户机,服务器被称为肥服务器.而WEB应用中的客户端的报表打印则没有C/S模型那

报表打印

报表打印 一开始接触的软件就是水晶报表,说实话,除了在设计的时候感觉好麻烦以外,其他的都还不错,想在表现形式上,使用方法上,代码添加上都不错.唯一可能的不足是打印比较麻烦,没有自动获取本机打印机的函数,不过新的报表10.0里不知道可不可以,据说有此功能.就在2天前发现了调用IE打印方法的JAVASCRIPT.当时就一个感觉"相见恨晚".虽然制作上没有水晶灵活但使用上方便很多.可以直接调用后台代码获取数据并赋值,这样省了设计一个步骤.而且可以先用word做一个格式出来,在往里面添加lab