Reporting Service报表开发
时间:2022-04-22
本文章向大家介绍Reporting Service报表开发,主要内容包括一、 中国式报表、二、在web中显示报表、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
项目中需要用到报表,经过技术验证和成本方面的考虑,最后决定使用Reporting Service,因此在这里把开发中的一些故事记下来,以备后用。
开发环境:VS2005,SQL SERVER 2005 SP3,这里说下为什么要用SP3,安全问题嘛,呵呵,如果用SP2,就会出现报表无法打印,报的错误是“无法加载客户端打印控件”,升级成SP3就OK了。
一、 中国式报表
对于形如Grid的这种表格,用RS来做超级简单,直接拖拽个表格就OK了。难的是中国式报表,比如下面这个:
直接用表格来做比较麻烦,用矩阵来做的话,上图中的“其中”又不好画出来。
对这种情况,偷一下懒,先用文本框绘制静态的部分,堆一个表格,然后用表格来显示空具体的数据
最后运行的结果
二、在web中显示报表
将前面的报表稍微修改下,在数据源里加上一个参数,比如
SELECT top 8 s.SalesOrderID, e.EmployeeID, e.Title, s.SalesOrderNumber, title=@title FROM Sales.SalesOrderHeader AS s INNER JOIN HumanResources.Employee AS e ON s.SalesPersonID = e.EmployeeID
这里的@title就是一个参数,需要在运行的时候提供
在web中显示报表可以通过MS提供的ReportViewer控件,
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt"
Height="487px" ProcessingMode="Remote" Width="1094px">
<ServerReport ReportPath="/Dynamic Query Tutorial/SmallSchoolBase7" />
</rsweb:ReportViewer>
在控件的标记里可以直接设定报表所在的路径,当然,这些都可以在代码里来实现
比如
ReportParameter parameter = new ReportParameter("title", "test");//添加参数
List<ReportParameter> list = new List<ReportParameter>();
list.Add(parameter);
this.ReportViewer1.ServerReport.SetParameters(list);
this.ReportViewer1.ShowParameterPrompts = false; //不显示参数提示
运行的效果:
- [个人翻译]Redis 集群教程(下)
- [个人翻译]Redis 集群教程(中)
- 自学Apache Spark博客(节选)
- scrapy爬取免费代理IP存储到数据库构建自有IP池
- 每天一个Linux命令:netstat
- Hadoop - MapReduce
- 进击的爬虫:用Python搭建匿名代理池
- 计算机程序的思维逻辑 (5) - 小数计算为什么会出错?
- QQ空间爬虫最新分享,一天 400 万条数据
- 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算
- Python中典型内建函数的用法
- 软件开发接力赛的最后一棒:上线发布
- 计算机程序的思维逻辑 (3) - 基本运算
- 突破反爬虫的利器——开源IP代理池
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ActiveMQ NMS使用过程中的一点经验
- asp.net core 认证及简单集群
- WebAPI问题追踪日志记录过滤器
- 使用责任链模式消除if分支实践
- sql操作知识点个人笔记(SQLServer篇)
- kettle学习笔记(二)——kettle基本使用
- Spring源码深度解析(二)
- Repository个人实践
- 摩斯码编解码器
- kettle学习笔记(三)——kettle资源库、运行方式与日志
- 使用Let's Encrypted HPPTS你的网站
- .net core web api + Autofac + EFCore 个人实践
- kettle学习笔记(六)——kettle转换步骤
- 记一次带层级结构列表数据计算性能优化
- kettle学习笔记(九)——子转换、集群与变量