基于MVC4+EasyUI的Web开发框架经验总结(15)--在MVC项目中使用RDLC报表

简介:

RDLC是一个不错的报表,有着比较不错的设计模式和展现效果,在我的Winform开发里面,使用RDLC也是一个比较方便操作,如可以参考文章《DevExpress的XtraReport和微软RDLC报表的使用和对比》或者《会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载》进行了解。但是基于MVC方式,如何构建和展现RDLC报表呢?本文主要介绍如何在基于MVC4+EasyUI的Web开发框架上进行RDLC的集成和使用。

1、RDLC绑定数据源

RDLC的报表设计,是使用VS直接进行编辑的,因此它不管是在Web上,还是在Winform上,设计的方式都差不多,好像绑定数据源的方式有一点不同,WInform的可以选择基于,而Web的只能基于数据库连接方式构建数据绑定对象。

它们两者之间在创建数据源的时候,弹出的对话框选择界面如下所示,看起来Winform的方式选择数据源的方式很多样化。

最终,通过Web方式构建了一个数据集,并在设计视图里面设计一个用户的报表界面,并绑定它们对应的字段,具体如下所示。

在RDLC的设计界面上,它们的操作内容好像是一样的,没有什么差异,可以使用各种数学函数SUM、COUNT等,也可以使用对字段的表达式,格式样式等方式,从而方便构建出一些准确、美观的报表,这部分可以参考文中开始的那两篇引用文章,这里就不再进行细节上的赘述,因为它们是一样的。

2、在Web界面上创建一些功能按钮和实现

我们在MVC项目里面,创建并保存好RDLC报表文件到对应的Report目录上,如下所示。

然后创建一个视图,并在视图里面构建一些按钮,方便构建查询不同的报表格式功能,具体效果如下所示。

HTML代码如下所示

    <div style="padding:10px; border:1px solid black">
        <div>
            <a href="@Url.Action("UserRdlcReport", new { format = "Image" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'">图片输出</a>
            <a href="@Url.Action("UserRdlcReport", new { format = "PDF" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'"> PDF输出</a>
            <a href="@Url.Action("UserRdlcReport", new { format = "Excel" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'">Excel输出</a>
            <a href="@Url.Action("UserRdlcReport", new { format = "Word" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'">Word输出</a>
        </div>
    </div>
    <div id="autoUpdate" style="display: none; overflow-y: auto" class="SlideContainer">
        <table width="100%" height="100%">
            <tr>
                <td>
                    <table>
                        <tr>
                            <td></td>
                            <td></td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr><td><iframe id="myReport" width="100%" height="800"></iframe></td></tr>
        </table>
    </div>

完成这些布局后,我们还需要在对应的控制器里面,对RDLC的报表进行数据绑定并呈现出来。

绑定RDLC报表,并赋值对应的数据源操作如下所示。

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Report/WHC.UserReport.rdlc");
            var dt = baseBLL.GetAll();

            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", dt);
            localReport.DataSources.Add(reportDataSource);

呈现的操作代码如下所示,默认我们以图片进行展现。

            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;

            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);

            return File(renderedBytes, (format.ToLower() == "image") ? "image/jpeg" : mimeType);

最终默认可以看到图片的报表展现效果。

当然,我们上面还有其他功能的操作,如PDF功能的展现,这个是一个不错的格式展现,每页分的很好,如果在IE里面,会独立打开PDF文件;如果是Chrome浏览器,则会在浏览器里面直接打开,比较好。

当然,Excel和Word就只能下载进行查看了,因为浏览器并不支持直接在上面进行预览查看的了,除非借助其他控件或者做法。

3、图片内容的连续输出

我们了解RDLC的话,应该知道,一般RDLC报表,它都是通过一个DeviceInfo的信息进行展现的,如下所示是一个标准的DeviceInfo对象。

            string deviceInfo =
            "<DeviceInfo>" +
            "  <OutputFormat>" + deviceType + "</OutputFormat>" +
            "  <PageWidth>8.5in</PageWidth>" +
            "  <PageHeight>11in</PageHeight>" +
            "  <MarginTop>0.5in</MarginTop>" +
            "  <MarginLeft>1in</MarginLeft>" +
            "  <MarginRight>1in</MarginRight>" +
            "  <MarginBottom>0.5in</MarginBottom>";

但是这样的内容,如果展现图片的话,就只会展示一页的内容,一般是800的高度这样子,但是我的报表里面可能有很多记录,如何能够让它全部展现出来呢?

方法是有的,不过不是很完美,就是需要计算大概的尺寸,然后修改PageHeight的数值,让它动态的删除最大的记录,达到全部内容都可以输出看到。

为了达到这个目的,我对图片格式输出的报表,对它的高度进行了一个简单的计算,然后换成它的标准高度,这样代码如下所示。

            if(format.ToLower() == "image")
            {
                double inchValue = (dt.Count / 37.0) * 11; 
                deviceInfo += string.Format("  <PageHeight>{0}in</PageHeight>", inchValue);
            }
            else
            {
                deviceInfo += "  <PageHeight>11in</PageHeight>";
            }

最后界面代码如下所示。

本文转自博客园伍华聪的博客,原文链接:基于MVC4+EasyUI的Web开发框架经验总结(15)--在MVC项目中使用RDLC报表,如需转载请自行联系原博主。



 

目录
相关文章
|
3天前
|
JavaScript 前端开发 数据安全/隐私保护
Web开发者必看:手把手教你如何轻松播放m3u8流地址,解锁视频播放新技能,让你的项目更上一层楼!
【10月更文挑战第23天】随着互联网技术的发展,m3u8格式因良好的兼容性和高压缩率被广泛用于网络流媒体传输。本文介绍如何在Web端播放m3u8流地址,包括引入视频播放器(如Video.js)、创建播放器容器、初始化播放器及播放m3u8流的具体步骤。此外,还涉及处理加密m3u8流的示例。
7 1
|
11天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
30 1
|
26天前
|
前端开发 JavaScript API
惊呆了!学会AJAX与Fetch API,你的Python Web项目瞬间高大上!
在Web开发领域,AJAX与Fetch API是提升交互体验的关键技术。AJAX(Asynchronous JavaScript and XML)作为异步通信的先驱,通过XMLHttpRequest对象实现了局部页面更新,提升了应用流畅度。Fetch API则以更现代、简洁的方式处理HTTP请求,基于Promises提供了丰富的功能。当与Python Web框架(如Django、Flask)结合时,这两者能显著增强应用的响应速度和用户体验,使项目更加高效、高大上。
45 2
|
18天前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
71 0
|
24天前
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
25 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
42 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
178 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
75 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
162 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
96 0