相信很多人都會遇到這樣的需求:當表格按照某幾個列分組時,需要為組添加展開和折疊的操作。
最初展現表格的時候只展現最外層分組,然后點擊展開后可以查看分組內的明細情況。
先來一張效果圖,然后再看具體如何實現:
話不多說,我們來看看這個功能如何實現。
首先創建示例表
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