OEA 框架中集成的 RDLC 报表介绍

之前 OEA 一直用着一个 Delphi 开发的报表,所以两年来我一直就想在 OEA 中构建一个纯 .NET 的报表模块,但是一想到要开发复杂的报表引擎和设计器就觉得麻烦。所以这事一直拖着。最近开始研究一些成熟的报表引擎,经过对比,还是发现微软的 RLDC 报表已经能满足我大多数需求。其中包括表格、矩阵、图表 等复杂控件,同时同样的报表格式在 B/S 模式下也可以直接使用,最新的 Tablix 控件非常灵活,能实现大多数表格样式。所以我决定不再费时费力去造一个轮子,而是直接把微软的 RDLC 报表集成进来。最终集成到 OEA 中,只花了不到一周的时间。虽然现在还处在第一版,没有给客户使用的设计器。不过就目前的开发效率来看,开发人员开发一个报表,速度已经比较快了。

接下来,我就基于之前已经发布的进销存示例项目(JXC),来演示一下,基于 OEA 框架,是如何开发一个报表模块的。

报表开发示例

第一步,我们需要开发一个一般的列表模块。

这样,可以在使用报表前把后台数据相关的实体、数据层代码都开发完成,并检验数据是否正确。这一部分的内容与报表无关,我就直接使用 JXC 之前的单据查询模块中采购入库单界面:

把这个页签的代码拷贝成一个新的页签,

红线中代码是直接拷贝上一行并修改了显示名称,此时效果如下:

此时,就算已经完成了一个全新的列表查询结果界面的开发。那么,我们如何把这个传统的列表界面转换为报表显示界面呢?

第二步,在聚合块申明中,这个界面块申明为报表界面块,代码如下:

new SurrounderBlock(typeof(OrderStorageInBill), QueryObjectView.ResultSurrounderType)
{
    KeyLabel = "采购入库单 - 报表",
    BlockType = BlockType.Report
},

然后为 OrderStorageInBill 类对应的这个视图配置中,申明需要使用的报表名称(该名称在系统所有报表名称中必须是唯一的)。如下:

internal class OrderStorageInBillConfig : EntityConfig<OrderStorageInBill>
{
    protected override void ConfigView()
    {
        View.UseReport("采购入库单报表统计.rdlc");

再次打开界面,我们会发现该页签对应的界面块,已经变成了一个报表界面,并同时带上了报表界面的两个重要功能:“刷新 RDLC 字段”及“报表数据”。

到此,所有的代码已经完成,接下来的过程也不再需要关闭程序或者重新编译。

第三步,可以开始设计报表了。

注意到,由于到现在还没有建立并设计 RDLC 报表文件,所以上图中的报表显示控件所有按钮都是不可用的。点击“刷新 RDLC 字段”按钮,弹出以下界面:

点击确定后,框架自动生成相关的 RDLC 文件到指定目录(该目录可在配置文件中进行配置),刷新报表显示控件,并弹出如下提示:

点击确定,可把该路径拷贝到剪贴板中。

注意到,此时报表控件的按钮已经可用,说明相应的 RDLC 文件已经生成:

所以我们需要使用设计器对其进行设计,由于目前还没有开发单独的 RDLC 设计器,所以暂时用 VS2012 进行设计。在 VS 中直接打开该文件(路径已经在剪贴板中了),VS 将启动对应的报表设计界面:

框架在生成此文件时,已经自动生成了相关的数据源节点(本示例中只有一个简单的实体数据源,更多的数据源可以使用代码设置),而且这些字段的名称已经带上了界面显示的中文名称,方便报表设计。

所以我们接下来只需要对这些数据进行报表设计即可,如何设计 RDLC 报表的内容,网上有较多内容,这是我最后设计出来的报表:

刚才说到在设计过程中是不需要关闭程序的,在对 RDLC 文件进行任何修改并保存后,可以点击报表控件上的刷新按钮,即可直接预览当前效果。这是最终生成的报表界面:

另外,设计过程中,也可以点击“报表数据”按钮查看当前报表背后显示的列表数据,方便理解后台数据。

在以后的时间里,我可能还需要想办法搞一个 RDLC 的设计器方便客户使用。这也是个麻烦事……

不过集成报表这个心结有两年时间了,现在总算是大致解决,可以在 OEA 中比较快地开发报表了,可喜可贺! 

附:RDLC 数据绑定类型定义图

补充:没有安装 VS2012 的电脑,需要安装 http://www.microsoft.com/en-us/download/details.aspx?id=27230  ReportViewer 控件后才能查看报表,直接拷贝 dll 到 Debug 目录下不行,谁知道原因?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏那些年遇到的坑

前端性能优化(二)

     从用户访问资源到资源完整的展现在用户面前的过程中,通过技术手段和优化策略,缩短每个步骤的处理时间从而提升整个资源的访问和呈现速度。

1212
来自专栏小白课代表

Origin Pro 2016 安装教程

1823
来自专栏Youngxj

一个链接地址获取对方IP地址及位置教程

2.8K5
来自专栏前端真相

浏览器存储之cookie

2037
来自专栏服务端技术杂谈

Angular项目实践

今天主要和大家分享四个内容:第一,是为什么我们要选择 Angular;第二,是我们在使用 Angular 过程中总结的一些比较好的实践;第三,是怎样更好的组织项...

4197
来自专栏李蔚蓬的专栏

An overview of the Web(Web概述)

C/S结构和B/S结构是当今世界网绍程序开发体系结构的两大主流.目前,这两种结构都有自己的市 场份和客户群。但是,这两种体系结构又各有各的优点和缺点,下面将从...

943
来自专栏全栈

前端工程化(一)---工程目录搭建

1183
来自专栏java一日一条

服务端 I/O 性能大比拼:Node、PHP、Java 和 Go

理解应用程序的输入/输出(I/O)模型,意味着其在计划处理负载与残酷的实际使用场景之间的差异。若应用程序比较小,也没有服务于很高的负载,也许它影响甚微。但随着应...

3574
来自专栏Jerry的SAP技术分享

利用Excel导入数据到SAP C4C

工作中心Data Workbench,工作中心视图Import,点download metadata:

3695
来自专栏FreeBuf

制作iOS内核调试线与调试内核

0x00 说明 早期A4处理器的机器是能直接调内核的,而且30pin的数据线并没有对内核信息加密,因此我们能够直接读到内核数据。而现在的新机器一律采用加密过的l...

4107

扫码关注云+社区