VS2012报表(RDLC)系列应用之单据批量打印

简介: 一、前言                        最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现。经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs200...

一、前言

        image

        image

       最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现。经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs2005的版本,有质的提升,不过仍有一下几点缺憾:

        1、内置函数不支持C#,只支持Visual Basic

        2、不支持Asp.net MVC,支持webForm和winForm

        3、VS2008及以下版本开发WebForm时,不建议使用RDLC,因为生成的报表样式不兼容chrome浏览器。

        如果未来时间充裕,我将会把RDLC一系列应用实例分享出来。闲话少说,言归正传。

二、测试数据

--订单表
create table fcwOrder
(
id int identity(1,1),
ordercode varchar(50),--订单号
ordername varchar(50),--订单名字
opername varchar(50),--经手人
comname varchar(50),--客户名称
createtime datetime,--订单日期
barcode image--条形码,预留字段。
)
--订单明细
create table fcwOrderDetails
(
id int identity(1,1),
ordercode varchar(50),--订单号
procode varchar(50),--产品编号
proname varchar(50),--产品名称
promodel varchar(50),--产品型号
pronum int --订购数量
)
--测试数据
insert into fcwOrder(ordercode,ordername,opername,comname,createtime) values('order001','订单一','张三一','客户一','2014-07-01')
insert into fcwOrder(ordercode,ordername,opername,comname,createtime) values('order002','订单二','张三二','客户二','2014-07-02')
insert into fcwOrder(ordercode,ordername,opername,comname,createtime) values('order003','订单三','张三三','客户三','2014-07-03')

insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order001','pro0011','产品一一','长1宽1',11)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order001','pro0012','产品一二','长1宽2',12)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order002','pro0021','产品二一','长2宽1',21)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order002','pro0022','产品二二','长2宽2',22)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order003','pro0031','产品三一','长3宽1',31)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order003','pro0032','产品三二','长3宽2',32)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order003','pro0033','产品三三','长3宽3',33)
--统一订单明细
select o.id as orderid,o.ordercode,o.opername,o.ordername,o.comname,o.createtime,o.barcode,
      d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
      from fcwOrder o
      join fcwOrderDetails d on d.ordercode=o.ordercode

三、编码实现

  提示:本案例是属于winform程序,原理上操作RDLC部分后台代码也可用于webform      开发环境:Visual Studio 2012 , Sql server 2012

1、【创建项目】打开VS2012,新建项目Fcw.RDLC

image
2、【创建数据集】右击项目“Fcw.RDLC”,添加新建项,选择数据集,创建数据集Order.xsd

image
image
3、【配置数据集】将工具箱中的TableAdapter拖入到数据集设计器中,配置数据库连接后,并将以下语句装载到表中:

select o.id as orderid,o.ordercode,o.opername,o.ordername,o.comname,o.createtime,o.barcode,
      d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
      from fcwOrder o
      join fcwOrderDetails d on d.ordercode=o.ordercode

右键单击已经生成的TableAdapter,选择属性,将名称改为Order


image
image
image
4、【新建报表】,选择Fcw.RDLC,右键选择添加新建项,选择报表。创建order.rdlc

image
5、【配置报表数据源】双击打开Order.RDLC设计器,在报表数据源,点击新建---》数据集,选择已有的数据源或新建新数据源,名称也改成Order
image
6、【设计报表】将工具箱中的列表拖拽到rdlc界面设计器上,并指定列表的数据名称Order

image

6.1 选中列表,在行组中,用鼠标右键点击详细信息,添加组,父组。分组依据为ordercode (订单编号),右击ordercode分组,选中在组的各实例之间分页,作用是每个订单页显示。

image
image

6.2 删除自动添加的列ordercode及 详细信息组
image
image

6.3,依次拖入 表、文本框、图像,在报表数据源,新建参数。根据需求界面完成设计。
注:列表内默认包含矩形,也可以根据需要手动添加。矩形可实现循环数据内的排版。满足个性化需求。

image
7【winform代码】.winform 拖入ListBox,Button,ReportViewer等步骤,不再赘述。
ListBox的selectMode设为 MultiSimple,
为ReportView设定RDLC文件
重要代码:

private void Form1_Load(object sender, EventArgs e)
        {
            //绑定list_order
            DataTable dtorder = SQLHelper.GetDataTable(@"select o.id as orderid,o.ordercode,o.opername,o.ordername,o.comname,o.createtime,o.barcode  from fcwOrder o");
            list_order.DataSource = dtorder;
            list_order.DisplayMember = "ordercode";
            list_order.ValueMember = "ordername";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            //构造多选的order列表
            foreach (object obj in list_order.SelectedItems)
            {
                DataRowView drv = (DataRowView)obj;
                if(drv!=null)
                {
                    sb.Append("'" + drv.Row["ordercode"].ToString() + "',");
                }
            }
            //为report绑定数据源
            if (sb.ToString().Length > 2)
            {

string orderwhere = sb.ToString().Substring(0, sb.ToString().Length - 1);
                string strsql = @"select o.id as orderid,o.ordercode,o.opername,o.ordername,o.comname,o.createtime,o.barcode,
      d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
      from fcwOrder o
      join fcwOrderDetails d on d.ordercode=o.ordercode where o.ordercode in (" + orderwhere + ")";

                DataTable dtorder2 = SQLHelper.GetDataTable(strsql);
                reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.LocalReport.EnableExternalImages = true;
                reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Order",dtorder2));
                reportViewer1.LocalReport.SetParameters(new ReportParameter("para_Total",dtorder2.Rows.Count.ToString()));
                reportViewer1.RefreshReport();


            }
        }

8、【最终效果】

image
 
 

 

四、总结

本篇文章从基础开始搭建一个基本的单据批量打印应用,涉及数据集的使用,RLDC中列表、表、文本框、矩形、参数、组分页的使用方式。

RDLC中表用来实现类似表格数据之类的需求,包含分组统计汇总、分页等。

文本框用来实现单个字段的显示或者用来处理部分线条等。

参数用来接收固定值。

矩形用来方便排版,当其他方式设计和最终呈现出现布局不同时,可用矩形把布局错乱的部分包围起来。

列表,可以用来处理循环中的单条数据下的各种样式排版。实现自定义需求。

传送门:批量打印单据批量单据打印 

 

相关文章
|
SQL 数据可视化 Linux
ClickHouse【环境搭建 03】Linux环境离线安装 clickhouse-22.3.3.44 配置参数说明+可视化界面使用(离线安装文件分享百度云盘)
ClickHouse【环境搭建 03】Linux环境离线安装 clickhouse-22.3.3.44 配置参数说明+可视化界面使用(离线安装文件分享百度云盘)
1534 0
|
前端开发 索引
Layui 内置方法 - layer.style(重新定义层的样式)
Layui 内置方法 - layer.style(重新定义层的样式)
350 0
|
8月前
|
安全 数据可视化 数据管理
国内主流低代码开发平台解析与盘点
本文系统梳理了当前主流低代码开发平台,涵盖通用型、垂直行业型、流程自动化型、数据库驱动型及移动应用优先型平台,分析了其功能特点、技术架构与适用场景,并从企业需求、规模、预算及技术支持等方面提供选型建议。文章指出,低代码平台正加速与AI、边缘计算等技术融合,推动企业数字化转型。
407 1
|
10月前
|
SQL 人工智能 Java
阿里云百炼开源面向 Java 开发者的 NL2SQL 智能体框架
Spring-ai-alibaba-nl2sql 是析言 GBI 产品在数据问答领域的一次重要开源尝试,专注于 NL2SQL 场景下的核心能力开放。
2710 48
|
小程序 数据库
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
954 0
Mac Brew install慢的问题
Mac Brew install慢的问题
478 1
|
人工智能 PyTorch 算法框架/工具
【人工智能】Transformers之Pipeline(六):图像分类(image-classification)
【人工智能】Transformers之Pipeline(六):图像分类(image-classification)
477 0
|
Java
SpringBoot集成Mqtt
关于SpringBoot集成mqtt
5400 8
SpringBoot集成Mqtt
|
消息中间件 监控 Apache
RocketMQ助力编程猫构建稳定的业务系统
通过使用商业版本的RocketMQ,依赖于有保障的SLA(99.99999999%数据可靠性,99.95%服务可用性),就像是站在巨人的肩膀上构建系统。
4681 106
RocketMQ助力编程猫构建稳定的业务系统
|
人工智能 Python Shell
CodeFormer——AI驱动的面部图像修复与增强
CodeFormer是由南洋理工大学和商汤科技联合研发的AI人脸复原模型,结合VQGAN和Transformer技术,能从模糊或马赛克图像中生成清晰图像。它具备老照片修复、黑白照片彩色化、马赛克修复和低码率视频增强等功能。安装过程涉及miniconda3、Python环境配置、相关库的安装及模型训练数据下载。在测试视频增强时,虽然初期遇到ffmpeg导入问题,但通过安装ffmpeg-python得以解决,不过CPU占用率高。此外,还展示了对图片进行增强的命令行操作及结果示例。