玩转SSRS第六篇---客户端报表进阶
上一篇介紹了客戶端報表的基本開發。此篇講介紹如何給客戶端報表自定義開發數據源。
通過上一篇我們知道可以通過Dataset的方式給報表添加數據源,這種方式通過UI操作的方式相對來說比較簡單。此外我們也可以通過其它方式為客戶端報表提供數據源,使數據的組織更靈活。下面將介紹通過項目代碼的方式為報表提供數據源。
回顧第三篇我們建立的SSRS報表,它的數據集的結構:
首先,基于上一篇建立的asp.net項目的基礎上,添加一個類,這個類的結構將跟上面報表數據集中的結構一模一樣。右鍵項目名稱然后Add->New Item…
左側選擇Code,右側選擇Class,為項目添加一個類。
打開創建的類文件,將里面的代碼全部替換成:
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; }
}
}
可以看到這個類結構的定義和先前 SSRS報表的數據集結構是一樣的。
接下來再在這個文件中加入另外一個類,ReportTools,用來暴露公共方法為客戶端報表提供數據。
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語句的結果裝在到List集合類里。
為客戶端報表添加完提供數據源的方法后,需要將項目編譯一下,這樣后續的客戶端報表工具就可以檢測出新創建的數據結構。
然后,添加另外一張客戶端報表。
為報表添加一個數據集:
在數據集屬性界面中,數據源直接選擇項目的名稱,然后在Available datasets: 選擇剛才建立的方法:ReportTools(GetReport)。
可以看到檢測出的數據結構跟 在SSRS下是一樣的。
接下來,參照第三篇中的方法設計報表。
下面為這個報表創建一個承載它的asp.net頁面,并且為它添加ScriptManager控件以及ReportViewer控件,選擇此篇新建立的報表。
隨后,系統為其自動生成了一個ObjectDataSource控件。
為頁面添加一個DropDownList控件。
點擊DropDownList控件向右的箭頭,點擊Edit Items…
為控件手動添加一些值。
點擊OK關閉ListItem編輯器,回到設計界面。
選擇DropDownList控件,在屬性列表里修改AutoPostBack的屬性為True。
DropDownList控件相關設置完畢,點擊ObjectDataSource向右的箭頭,選擇Configure Data Source…
數據源配置界面,直接點Next。
可以看到系統檢測到了報表中配置的方法,直接點擊Next。
由于方法為報表數據源指定了一個參數,所以這里需要指定通過什么方式為數據源傳進參數。
這里在參數源選擇Control ,也就是指定參數的值是通過控件的值傳入的。在ControlID指定剛才加入的DropDownList控件。
點擊Finish完成數據源控件的配置。
最后,回到 aspx頁面的Source視圖,更改 ReportViewer控件的屬性ReportPath,并且將默認的報表屬性去掉:
接下來,將新建的asp.net頁面,設置成開始頁面,然后點擊F5運行。
可以看到效果跟SSRS服務器端報表是一樣的。
通過最近兩篇對客戶端報表的介紹,相信大家對客戶端報表已經有了一個了解。一定程度上來說,在你不想去單獨部署和維護一個報表服務的前提下,客戶端報表確實是一個不錯的選擇方案。而且借助Coding的方式,數據的生成相對來說也更隨意一些,比如從分析服務中加載數據到客戶端報表中,也可以參考我先前的一篇隨筆:
http://www.cnblogs.com/aspnetx/archive/2012/06/20/2556916.html
?
總結
以上是生活随笔為你收集整理的玩转SSRS第六篇---客户端报表进阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win8 IIS 安装和部署网站问题
- 下一篇: 虚拟机安装与概述(3)