相信很多人都会遇到这样的需求:当表格按照某几个列分组时,需要为组添加展开和折叠的操作。

最初展现表格的时候只展现最外层分组,然后点击展开后可以查看分组内的明细情况。

先来一张效果图,然后再看具体如何实现:

话不多说,我们来看看这个功能如何实现。

首先创建示例表

CREATE TABLE [dbo].[DetailReportTestData]
(
[Category1] [nvarchar](50) NULL,
[Category2] [nvarchar](50) NULL,
[Name] [nvarchar](50) NULL,
[Value1] [int] NULL,
[Value2] [int] NULL
)

然后造点数据插进去,代码如下:

WITH A AS
(
SELECT 'Name1' AS Name, 3 AS Value1, 4 AS Value2 UNION ALL
SELECT 'Name2', 4, 5 UNION ALL
SELECT 'Name3', 6, 66 UNION ALL
SELECT 'Name4', 78, 22 UNION ALL
SELECT 'Name5', 55, 66
), B AS
(
SELECT 'Category21' AS Category2 UNION ALL
SELECT 'Category22' UNION ALL
SELECT 'Category23' UNION ALL
SELECT 'Category24'
),C AS
(
SELECT 'Category11' AS Category1 UNION ALL
SELECT 'Category12' UNION ALL
SELECT 'Category13' UNION ALL
SELECT 'Category14' UNION ALL
SELECT 'Category15' UNION ALL
SELECT 'Category16' UNION ALL
SELECT 'Category17'
)
INSERT INTO [dbo].[DetailReportTestData]
SELECT C.*, B.*, A.*
FROM A
CROSS JOIN B
CROSS JOIN C

然后在SQL Server Data Tools (SSDT/BIDS) 中创建数据源(DataSource)和数据集(DataSet)

数据源为你创建表的数据库,数据集如下:

SELECT [Category1]
,[Category2]
,[Name]
,[Value1]
,[Value2]
FROM [dbo].[DetailReportTestData]

然后从工具箱中托一个table 出来,把Name, Value1, Value2 选到table里,如下图:

接着依次添加分组Category2, Category1,可以在单元格上点击右键-->Add Group-->Parent Group 然后选择列名来实现,也可以直接把列拖拽到指定的位置来实现,如下图:

先看一下预览的效果:

接下来我们开始添加可折叠操作,如下图,在Row Groups 窗口里右键点击 Details,然后选择 Group Properties...

然后选择 ”Visibility“, 右边选择”Hide“,下面勾选上”Display can be toggled by this report item:“,在下拉列表里选择Category2

这样,点击Category2 列的时候才会展开 Name 列,如下图:

然后对Category2 也执行相同的操作,只不过在Display can be toggled by this report item: 部分,选择Category1

这样 点击Category1列 就会展开 Category2 列.

为了美观,我为列头添加了背景颜色以及修改了字体颜色,现在的预览效果如下图:

这样就可以点击加号来展开详细数据,如下图:

然后就完成了吗?

不知道大家发现没有,Name, Value1, Value2 三个列,在未展开时显示的是Name1的数据,也就是第一行的数据。按照常理来讲,当未展开的时候,当前行应该显示的是汇总数据。

在Row Groups 窗口中的Details 右侧,点击小倒三角按钮,选择Add Total-->After. 如下图

这样就添加了一个汇总行,我们为汇总行命名为Total,如下图所示:

预览一下,效果如下所示:

可以看到,在未展开时,Name, Value1, Value2 显示的是汇总的值,而展开后显示的是具体的明细。

这样就完了吗?对于我这个有强迫症并且有完美主义倾向的人来看还不够好,当展开所有Name 的时候,下面还有一行Total,如果我想看Total的信息,我不展开就好啦,如果展开所有的Name,下面都有一行Total,对表格本身也会增加很多的行,展现更多的数据使得我们眼花缭乱。

那么,我能否实现这样的功能:当Name 未展开时,显示的是汇总值,而展开的时候不显示Total 的行呢?

答案是肯定的,还是在Visibility 属性上面着手。

点击表格的任意位置,会显示表格边框。然后右键点击左下角的边框,这是会弹出一个菜单栏,并且同时选中最下面一行。选择Row Visibility...

这时会弹出一个属性框,按照下图勾选。

这里的选择跟上面的选择不同是因为,在这样的默认状态是Show的,只有在点击Category2 列时,它才会变成Hide。

看一下预览效果吧:

这样,当展开所有Name 时,则不显示Total 行,未展开所有Name 时,则显示Total 行。大功告成。^_^

By: Albert Li, 2015-03-27 13:31:17

SSRS 实用技巧 ---- 为表格添加展开/折叠操作(明细报表)的更多相关文章

  1. 【JavaScript实用技巧(二)】Js操作DOM(由问题引发的文章改版,新人大佬都可)

    [JavaScript实用技巧(二)]Js操作DOM(由问题引发的文章改版,新人大佬都可!) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人 ...

  2. iOS实现类似QQ的好友列表,自由展开折叠(在原来TableView的基础上添加一个字典,一个Button)

    //直接代码 只包含 折叠展开字典的处理搭建#import "CFViewController.h" @interface CFViewController ()<UITab ...

  3. Notepad++ 实用技巧

    Notepad++是一款开源的文本编辑器,功能强大.很适合用于编辑.注释代码.它支持绝大部分主流的编程语言. 本文主要列举了本人在实际使用中遇到的一些技巧. 快捷键 自定义快捷键 首先,需要知道的是: ...

  4. PowerDesigner实用技巧小结(3)

    PowerDesigner实用技巧小结(3) PowerDesigner 技巧小结 sqlserver数据库databasevbscriptsqldomain 1.PowerDesigner 使用 M ...

  5. Mac实用技巧之:访达/Finder

    更多Mac实用技巧系列文章请访问我的博客:Mac实用技巧系列文章 Finder就相当于windows XP系统的『我的电脑』或win7/win10系统里的『计算机』(打开后叫资源管理器),find是查 ...

  6. JavaScript 实用技巧和写法建议

    1.前言 从大学到现在,接触前端已经有几年了,感想方面,就是对于程序员而言,想要提高自己的技术水平和编写易于阅读和维护的代码,我觉得不能每天都是平庸的写代码,更要去推敲,去摸索和优化代码,总结当中的技 ...

  7. Buildroot构建指南--快速上手与实用技巧

    Buildroot官方全英文使用手册的链接是https://buildroot.org/downloads/manual/manual.html,需要知道每一个细节的朋友,可以仔细查阅,这篇文章只是我 ...

  8. Hbuilder实用技巧(转)

    Hbuilder实用技巧 原创 2016年05月19日 10:25:42 标签: hbuilder 操作 16551 1. Q:怎么实现代码追踪? A:在编辑代码时经常会出现需要跳转到引用文件或者变量 ...

  9. Buildroot构建指南--快速上手与实用技巧【转】

    本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52335634 Buildroot官方全英文使用手册的链接是https://buildro ...

随机推荐

  1. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  2. js获取给定月份的N个月后的日期

    1.在讲js获取给定月份的N个月后的日期之前,小颖先给大家讲下getFullYear().getYear()的区别. ①getYear() var d = new Date() console.log ...

  3. Android性能优化之巧用软引用与弱引用优化内存使用

    前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强 ...

  4. node中子进程同步输出

    管道 通过"child_process"模块fork出来的子进程都是返回一个ChildProcess对象实例,ChildProcess类比较特殊无法手动创建该对象实例,只能使用fo ...

  5. C#中Length和Count的区别(个人观点)

    这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...

  6. [原] KVM 环境下MySQL性能对比

    KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...

  7. javascript动画系列第二篇——磁性吸附

    × 目录 [1]范围限定 [2]拖拽范围 [3]磁性吸附 前面的话 上一篇,我们介绍了元素拖拽的实现.但在实际应用中,常常需要为拖拽的元素限定范围.而通过限定范围,再增加一些辅助的措施,就可以实现磁性 ...

  8. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  9. PHP设计模式(六)原型模式(Prototype For PHP)

    原型设计模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型设计模式简单的来说,顾名思义, 不去创建新的对象进而保留原型的一种设计模式. 缺点:原型设计模式是的最主要的缺点就 ...

  10. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...