该功能的实现需要借助于reporting services的cache功能。当用户成功运行一个report后,该report就会被存储在server的cache中,直到用户的session结束才被自动清除。
1. 第一次运行report时,加载报表定义并获得该report的ExecutionID,并将其存储在session中
//load report definition
execInfo = res.LoadReportDefinition(rptDefinition, out warnings);
//store ExecutionID for later requests
Session[strExecutionID] = execInfo.ExecutionID;
2. 当点击报表上的加号或减号图标去展开折叠一个group时,将ToggleItemId并传给服务器。
a. 服务器用此前的ExecutionID获得在Cache的报表。
res.ExecutionHeaderValue.ExecutionID = (String)Session[strExecutionID];
b. 调用ToggleItem方法,告诉服务器要展开或折叠报表的哪个group。
resToggle = res.ToggleItem(strToggleItem);
c. 最后再调用Render方法并将报表输出到web页面
具体代码如下:
String strDevInfo = (strFormat == "HTML4.0" ? "<DeviceInfo><Toolbar>True</Toolbar><Section>0</Section><HTMLFragment>False</HTMLFragment></DeviceInfo>" : "");
String strExtension;
String strEncoding;
String strMimeType;
Warning[] warnings = null;
String[] strStreamIDs = null;
ExecutionInfo execInfo