相信不少人都會遇到這樣的需求:當表格按照某幾個列分組時,須要爲組添加展開和摺疊的操做。數據庫
最初展示表格的時候只展示最外層分組,而後點擊展開後能夠查看分組內的明細狀況。ide
先來一張效果圖,而後再看具體如何實現:工具
話很少說,咱們來看看這個功能如何實現。字體
首先建立示例表this
CREATE TABLE [dbo].[DetailReportTestData] ( [Category1] [nvarchar](50) NULL, [Category2] [nvarchar](50) NULL, [Name] [nvarchar](50) NULL, [Value1] [int] NULL, [Value2] [int] NULL )
而後造點數據插進去,代碼以下:spa
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)3d
數據源爲你建立表的數據庫,數據集以下:code
SELECT [Category1] ,[Category2] ,[Name] ,[Value1] ,[Value2] FROM [dbo].[DetailReportTestData]
而後從工具箱中託一個table 出來,把Name, Value1, Value2 選到table裏,以下圖:blog
接着依次添加分組Category2, Category1,能夠在單元格上點擊右鍵-->Add Group-->Parent Group 而後選擇列名來實現,也能夠直接把列拖拽到指定的位置來實現,以下圖:it
先看一下預覽的效果:
接下來咱們開始添加可摺疊操做,以下圖,在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