ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表
这次我们来演示MVC3怎么显示RDL报表,坑爹的微软把MVC升级到5都木有良好的支持报表,让MVC在某些领域趋于短板
我们只能通过一些方式来使用rdl报表。
Razor视图不支持asp.net服务器控件,但是aspx可以,所以用户其实可以通过aspx视图模版来显示rdl报表或者水晶报表。
我是有强迫症的人,我不喜欢在众多razor视图中,让aspx视图鹤立鸡群,所以这节主要是演示rdl在MVC中其中一种用法。
报表都有相似性 数据源-数据集-图表-表组成
在MVC项目中新建一个数据源,这个数据源最后将由数据表、TableAdapter、查询、关系组成,新建后可以点击右键查看。
这里我们用到TableAdapter来演示,首先新建一张表
CREATE TABLE [dbo].[SysSample](
[Id] [varchar]() NOT NULL,
[Name] [varchar]() NULL,
[Age] [int] NULL,
[Bir] [datetime] NULL,
[Photo] [varchar]() NULL,
[Note] [text] NULL,
[CreateTime] [datetime] NULL,
CONSTRAINT [PK__SysSampl__3214EC075AEE82B9] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
SysSample
并录入一些测试数据
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','张三',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','张三',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','李四',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','李四',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','王五',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','王五',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','柳六',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','柳六',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','X七',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('','X七',,'10 1 1991 12:00AM',NULL,NULL,'01 1 2013 12:00AM')
Test Data
一、创建数据源
二、选择您的数据链接,如果你有链接数据库的直接选择即可
三、新建一个链接,最后它会在web.config生成一个节点
<add name="AppDBConnectionString" connectionString="Data Source=.;Initial Catalog=AppDB;User ID=sa;Password=zhaoyun123!@#;MultipleActiveResultSets=True;Application Name=EntityFramework"
providerName="System.Data.SqlClient" />
四、配置向导
有多种方式供用户选择。我这里方便的使用了sql语句
输入select * from SysSample一条查询语句,接下来全勾上,每个勾都写得很清楚
数据集已经创建完毕
五、创建RDL
新建一个文件夹。专门来存放rdl -----> Reports
在Reports下创建SysSampleReport.rdlc文件
六、为报表创建数据集,数据源选择我们刚刚创建的AppDBDataSet数据源
七、随便添加一个图标常用的饼图和列表(老实说过如果不懂先右键)
上面说的都是创建报表的基础。我们早在asp.net页面已经熟悉了,回到Controller
添加以下方法(type = PDF,Excel,Word )
public ActionResult Reporting(string type = "PDF", string queryStr = "", int rows = , int page = )
{
//选择了导出全部
if (rows == && page == )
{
rows = ;
page = ;
}
GridPager pager = new GridPager()
{
rows = rows,
page = page,
sort="Id",
order="desc"
};
List<SysSampleModel> ds = m_BLL.GetList(ref pager, queryStr);
LocalReport localReport = new LocalReport();
localReport.ReportPath = Server.MapPath("~/Reports/SysSampleReport.rdlc");
ReportDataSource reportDataSource = new ReportDataSource("DataSet1", ds);
localReport.DataSources.Add(reportDataSource);
string reportType = type;
string mimeType;
string encoding;
string fileNameExtension; string deviceInfo =
"<DeviceInfo>" +
"<OutPutFormat>" + type + "</OutPutFormat>" +
"<PageWidth>11in</PageWidth>" +
"<PageHeight>11in</PageHeight>" +
"<MarginTop>0.5in</MarginTop>" +
"<MarginLeft>1in</MarginLeft>" +
"<MarginRight>1in</MarginRight>" +
"<MarginBottom>0.5in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
string[] streams;
byte[] renderedBytes; renderedBytes = localReport.Render(
reportType,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings
);
return File(renderedBytes, mimeType);
}
所以呢。没有传说的那么神秘,靠输出来制作报表
- List<SysSampleModel> ds把读取到的列表赋予给ds
- localReport.ReportPath指定报表的路径
- ReportDataSource reportDataSource = new ReportDataSource("DataSet1", ds);指定数据集 DataSet1
填充好数据集,最后的前端就是调用 Reporting这个方法
在谷歌浏览器输出PDF可以直接在网页预览,如果是其他格式将获得保存对话框弹出
右键选择打印可以接本地打印机
ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表的更多相关文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 任务调度系统界面 http: ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理 http://ww ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入
系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试
1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级
系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析
系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控
系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
系列目录 https://yunpan.cn/cZVeSJ33XSHKZ 访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...
随机推荐
- 前端css兼容性与易混淆的点
一.常用的骨灰级清除浮动 .clearfix:after { content: "."; display: block; height:; clear: both; visibil ...
- Virtual Box配置CentOS7网络(图文教程)
之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...
- 浅谈WEB页面提速(前端向)
记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...
- TODO:Laravel 使用blade标签布局页面
TODO:Laravel 使用blade标签布局页面 本文主要介绍Laravel的标签使用,统一布局页面.主要用到到标签有@yield,@ stack,@extends,@section,@stop, ...
- JavaScript Math和Number对象
目录 1. Math 对象:数学对象,提供对数据的数学计算.如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 2. Number 对象 :Js中提供数字的对象.包含整数.浮 ...
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...
- Python-Jenkins API使用 —— 在后端代码中操控Jenkins
最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...
- ASP.NET Core的路由[5]:内联路由约束的检验
当某个请求能够被成功路由的前提是它满足某个Route对象设置的路由规则,具体来说,当前请求的URL不仅需要满足路由模板体现的路径模式,请求还需要满足Route对象的所有约束.路由系统采用IRouteC ...
- javascript之Object.defineProperty的奥妙
直切主题 今天遇到一个这样的功能: 写一个函数,该函数传递两个参数,第一个参数为返回对象的总数据量,第二个参数为初始化对象的数据.如: var o = obj (4, {name: 'xu', age ...
- AJAX操作数据
本文使用AJAX访问数据库文件,并显示在网页中.另外还有AJAX对数据库的删除操作,网页不加载,只刷新数据. 随意使用数据库中的一张表: 使用AJAX显示表中内容,首先打入body代码: <h1 ...