日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

玩转SSRS第六篇---客户端报表进阶

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩转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第六篇---客户端报表进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。