玩转SSRS第六篇---客户端报表进阶
上一篇介紹了客戶端報(bào)表的基本開(kāi)發(fā)。此篇講介紹如何給客戶端報(bào)表自定義開(kāi)發(fā)數(shù)據(jù)源。
通過(guò)上一篇我們知道可以通過(guò)Dataset的方式給報(bào)表添加數(shù)據(jù)源,這種方式通過(guò)UI操作的方式相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。此外我們也可以通過(guò)其它方式為客戶端報(bào)表提供數(shù)據(jù)源,使數(shù)據(jù)的組織更靈活。下面將介紹通過(guò)項(xiàng)目代碼的方式為報(bào)表提供數(shù)據(jù)源。
回顧第三篇我們建立的SSRS報(bào)表,它的數(shù)據(jù)集的結(jié)構(gòu):
首先,基于上一篇建立的asp.net項(xiàng)目的基礎(chǔ)上,添加一個(gè)類(lèi),這個(gè)類(lèi)的結(jié)構(gòu)將跟上面報(bào)表數(shù)據(jù)集中的結(jié)構(gòu)一模一樣。右鍵項(xiàng)目名稱然后Add->New Item…
左側(cè)選擇Code,右側(cè)選擇Class,為項(xiàng)目添加一個(gè)類(lèi)。
打開(kāi)創(chuàng)建的類(lèi)文件,將里面的代碼全部替換成:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
?
namespace WebApplication3
{
public class ReportItem
{
public string ProductCategory { get; set; }
public string ShipDate { get; set; }
public double ProductStandardCost { get; set; }
public double SalesAmount { get; set; }
public double TaxAmount { get; set; }
}
}
可以看到這個(gè)類(lèi)結(jié)構(gòu)的定義和先前 SSRS報(bào)表的數(shù)據(jù)集結(jié)構(gòu)是一樣的。
接下來(lái)再在這個(gè)文件中加入另外一個(gè)類(lèi),ReportTools,用來(lái)暴露公共方法為客戶端報(bào)表提供數(shù)據(jù)。
public class ReportTools
{
public List<ReportItem> GetReport(string Year)
{
List<ReportItem> result = new List<ReportItem>();
?
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["AdventureWorksDW2012ConnectionString"].ConnectionString);
conn.Open();
?
StringBuilder sb = new StringBuilder();
sb.AppendLine("SELECT ST.EnglishProductSubcategoryName AS ProductCategory");
sb.AppendLine(",LEFT([ShipDateKey],6) AS [SHIPDATE]");
sb.AppendLine(",SUM([ProductStandardCost]) AS [ProductStandardCost]");
sb.AppendLine(",SUM([SalesAmount]) AS SalesAmount");
sb.AppendLine(",SUM([TaxAmt]) AS [TaxAmt]");
sb.AppendLine("FROM [AdventureWorksDW2012].[dbo].[FactInternetSales] F");
sb.AppendLine("LEFT JOIN [dbo].[DimProduct] P ON F.ProductKey=P.ProductKey");
sb.AppendLine("LEFT JOIN [dbo].[DimProductSubcategory] ST ON P.[ProductSubcategoryKey]=ST.[ProductSubcategoryKey]");
sb.AppendLine("WHERE LEFT([ShipDateKey],4)=" + Year);
sb.AppendLine("GROUP BY ST.EnglishProductSubcategoryName, LEFT([ShipDateKey],6)");
?
SqlCommand comm = new SqlCommand(sb.ToString(), conn);
?
SqlDataReader dr = comm.ExecuteReader();
?
while (dr.Read())
{
ReportItem ri = new ReportItem();
ri.ProductCategory = dr[0].ToString();
ri.ShipDate = dr[1].ToString();
ri.ProductStandardCost = Convert.ToDouble(dr[2]);
ri.SalesAmount = Convert.ToDouble(dr[3]);
ri.TaxAmount = Convert.ToDouble(dr[4]);
?
result.Add(ri);
}
?
dr.Close();
conn.Close();
?
return result;
}
}
這段代碼主要是講SQL語(yǔ)句的結(jié)果裝在到List集合類(lèi)里。
為客戶端報(bào)表添加完提供數(shù)據(jù)源的方法后,需要將項(xiàng)目編譯一下,這樣后續(xù)的客戶端報(bào)表工具就可以檢測(cè)出新創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。
然后,添加另外一張客戶端報(bào)表。
為報(bào)表添加一個(gè)數(shù)據(jù)集:
在數(shù)據(jù)集屬性界面中,數(shù)據(jù)源直接選擇項(xiàng)目的名稱,然后在Available datasets: 選擇剛才建立的方法:ReportTools(GetReport)。
可以看到檢測(cè)出的數(shù)據(jù)結(jié)構(gòu)跟 在SSRS下是一樣的。
接下來(lái),參照第三篇中的方法設(shè)計(jì)報(bào)表。
下面為這個(gè)報(bào)表創(chuàng)建一個(gè)承載它的asp.net頁(yè)面,并且為它添加ScriptManager控件以及ReportViewer控件,選擇此篇新建立的報(bào)表。
隨后,系統(tǒng)為其自動(dòng)生成了一個(gè)ObjectDataSource控件。
為頁(yè)面添加一個(gè)DropDownList控件。
點(diǎn)擊DropDownList控件向右的箭頭,點(diǎn)擊Edit Items…
為控件手動(dòng)添加一些值。
點(diǎn)擊OK關(guān)閉ListItem編輯器,回到設(shè)計(jì)界面。
選擇DropDownList控件,在屬性列表里修改AutoPostBack的屬性為T(mén)rue。
DropDownList控件相關(guān)設(shè)置完畢,點(diǎn)擊ObjectDataSource向右的箭頭,選擇Configure Data Source…
數(shù)據(jù)源配置界面,直接點(diǎn)Next。
可以看到系統(tǒng)檢測(cè)到了報(bào)表中配置的方法,直接點(diǎn)擊Next。
由于方法為報(bào)表數(shù)據(jù)源指定了一個(gè)參數(shù),所以這里需要指定通過(guò)什么方式為數(shù)據(jù)源傳進(jìn)參數(shù)。
這里在參數(shù)源選擇Control ,也就是指定參數(shù)的值是通過(guò)控件的值傳入的。在ControlID指定剛才加入的DropDownList控件。
點(diǎn)擊Finish完成數(shù)據(jù)源控件的配置。
最后,回到 aspx頁(yè)面的Source視圖,更改 ReportViewer控件的屬性ReportPath,并且將默認(rèn)的報(bào)表屬性去掉:
接下來(lái),將新建的asp.net頁(yè)面,設(shè)置成開(kāi)始頁(yè)面,然后點(diǎn)擊F5運(yùn)行。
可以看到效果跟SSRS服務(wù)器端報(bào)表是一樣的。
通過(guò)最近兩篇對(duì)客戶端報(bào)表的介紹,相信大家對(duì)客戶端報(bào)表已經(jīng)有了一個(gè)了解。一定程度上來(lái)說(shuō),在你不想去單獨(dú)部署和維護(hù)一個(gè)報(bào)表服務(wù)的前提下,客戶端報(bào)表確實(shí)是一個(gè)不錯(cuò)的選擇方案。而且借助Coding的方式,數(shù)據(jù)的生成相對(duì)來(lái)說(shuō)也更隨意一些,比如從分析服務(wù)中加載數(shù)據(jù)到客戶端報(bào)表中,也可以參考我先前的一篇隨筆:
http://www.cnblogs.com/aspnetx/archive/2012/06/20/2556916.html
?
總結(jié)
以上是生活随笔為你收集整理的玩转SSRS第六篇---客户端报表进阶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Win8 IIS 安装和部署网站问题
- 下一篇: 虚拟机安装与概述(3)