Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >报表打印(rdlc)

报表打印(rdlc)

作者头像
liulun
发布于 2022-05-09 03:18:05
发布于 2022-05-09 03:18:05
86500
代码可运行
举报
文章被收录于专栏:liulunliulun
运行总次数:0
代码可运行

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

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

如图:

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

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

3打印相关的工具类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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调用此工具函数的相关代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                    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报表

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RDLC(Reportview)报表直接打印,支持所有浏览器,客户可在linux下浏览使用
最近在做一个打印清单的,但是rdlc报表自带的工具栏中的打印按钮只有在ie内核下的浏览器才可以使用(其他的就会 隐藏),这导致了使用火狐和谷歌浏览器还有使用linux系统的客户打印成了问题,于是就自己百度搜,谷歌搜,然后就解决了,下面放上源码
冰封一夏
2019/09/11
2.2K0
rdlc
https://stackoverflow.com/questions/4652347/dynamically-binding-of-dataset-to-rdlc-reports
landv
2020/02/11
7130
"RDLC"报表-参数传递及主从报表
今天继续学习RDLC报表的“参数传递”及“主从报表” 一、先创建DataSet,如下图: 二、创建一个报表rptDEPT.rdlc,显示部门T_DPET的数据 三、嵌入Default.aspx中,写在
菩提树下的杨过
2018/01/23
3.1K0
"RDLC"报表-参数传递及主从报表
动态生成RDLC报表
1、从DataGrid提取(包括最新的增删改)数据,自动生成对应的RDLC报表文件(以流的形式驻存在内存中),用ReportViewer类来展示、打印、排版、预览、分页
NaughtyCat
2020/10/09
8.5K0
动态生成RDLC报表
课程设计—飞机订票系统
基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。
全栈程序员站长
2022/07/02
1.6K0
课程设计—飞机订票系统
sb测压工具你知多少?
SuperBenchmarker 是ㄧ个开源的类似于Apache ab的压力测试命令行工具。
手撕代码八百里
2021/04/20
7630
sb测压工具你知多少?
我用Java几分钟处理完30亿个数据...
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 文章来源:https://c1n.cn/GM8hb 目录 场景说明 模拟数据 场景分析 读取数据 处理数据 遇到的问题 场景说明 现有一个 10G 文件的数据,里面包含了 18-70 之间的整数,分别表示 18-70 岁的人群数量统计,假设年龄范围分布均匀,分别表示系统中所有用户的年龄数,找出重复次数最多的那个数,现有一台内存为 4G、2 核 CPU 的电脑,请写一个算法实现。         23,31,42,19,60,30,36,
猿天地
2022/05/16
5050
我用Java几分钟处理完30亿个数据...
java的几个不错习题
现在定义如下的一个数组:intoldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5},要求将以上数组中值为0的去掉,将不为0的值存入一个新的数组, 生成的新数组为:intnewArr[]={1,3,4,5,6,6,5,4,7,6,7,5},并且把这个数组打印出来。请你写出完整的代码。
热心的社会主义接班人
2018/08/02
3780
如何用 Java 几分钟处理完 30 亿个数据?
现有一个 10G 文件的数据,里面包含了 18-70 之间的整数,分别表示 18-70 岁的人群数量统计,假设年龄范围分布均匀,分别表示系统中所有用户的年龄数,找出重复次数最多的那个数,现有一台内存为 4G、2 核 CPU 的电脑,请写一个算法实现。
用户1220090
2025/03/24
580
如何用 Java 几分钟处理完 30 亿个数据?
LeetCode Weekly Contest 40解题思路
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/75222189
用户1147447
2019/05/26
4390
机房收费系统(VB.NET)——超详细的报表制作过程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/38356927
DannyHoo
2018/09/13
2K0
机房收费系统(VB.NET)——超详细的报表制作过程
使用JAVA反射的利与弊
在Java的20周年的纪念日的日子里,让我们来重新温习下Java里面的高级知识,Java肯定希望大家了解她,要不然你跟她天天相濡以沫了这么长时间,让她知道你竟然不了解她,不在乎她,那么她该有多伤心呢,所以我们不应该做一个负心汉,更不应该做一个忘恩负义的人,她教会了你生存的技能,所以我们也应该将她发扬光大! Java的核心技能有如下几项: (1)JVM的调优 (2)类加载器 (3)反射 (4)动态编译 (5)动态代理 (6)注解 (7)多线程 (8)IO,NIO,Socket,Chan
我是攻城师
2018/05/11
9170
geotools等值线生成
前文中,提到了等值面的生成,后面有人经常会问等值线的生成,本文在前文的基础上做了一点修改,完成了等值线的geotools生成。
牛老师讲GIS
2018/10/23
2.8K0
geotools等值线生成
时序数据库Influx-IOx源码学习九(查询主流程)
https://my.oschina.net/u/3374539/blog/5033469
刘涛华
2021/04/29
6350
13(01)总结StringBuffer,StringBuilder,数组高级,Arrays,Integer,Character
1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类。StringBuffer供我们使用。 (2)StringBuffer的构造方法 A:StringBuffer() B:StringBuffer(int size) C:StringBuffer(String str) /* * 线程安全(多线程讲解) * 安全 -- 同步 -- 数据是安全的 * 不安全 -- 不同步
Java帮帮
2018/03/15
8100
Excel导入导出数据库01
主要分为两部份 1.Excel操作类 1 引入 2 using System.Data.OleDb; 3 using System.IO; 4 using System.Collections; 5 6 /// <summary> 7 /// Excel导入导出 8 /// </summary> 9 public class ExcelToData 10 { 11 /// <summary> 12
欢醉
2018/01/22
7.3K0
面试+算法之回文(Java):验证回文串、回文数、最长回文子串、回文链表、分割成回文串、最短回文串
算法是一个程序员的核心竞争力,也是面试最重要的考查环节。本文整理一些与回文相关的基础算法题。注:本文语言为Java。
johnny666
2024/09/19
1380
JavaScript 总结(前端常用工具类的封装)
JavaScript (class是ES6的新东西,看着不爽可以变,但主要还是里面的方法) 1. type 类型判断 class TypeFn { isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } isNumber (o) { //是否数字 return Object.prototype.toString.call(o
纪莫
2018/04/19
2.5K1
微擎 CMS:从 SQL 到 RCE
该处的注入漏洞网上没有出现过分析文章,因此本文就来分析一下该处 SQL 注入的利用。
p4nda
2023/01/03
3.9K0
微擎 CMS:从 SQL 到 RCE
数仓血缘关系数据的存储与读写
这里我们采用了 Nebula v3.0.0、Nebula Java Client v3.0.0,这里提下 Nebula Graph 和 Java 客户端需要相兼容,版本号要对齐。
NebulaGraph
2022/05/26
1.2K0
数仓血缘关系数据的存储与读写
相关推荐
RDLC(Reportview)报表直接打印,支持所有浏览器,客户可在linux下浏览使用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验