布萊恩的學習筆記

分享是進步的開始--最近研究重點:MCTS

文章分類

每月文章




Locations of visitors to this page

文章標籤

全部標籤

動態修改報表(RDLC)的資料來源

小布最近在研究Reporting的部分,也上網找到一些資料,在這邊記錄一下,免得過幾天又忘記了。如果各位高手有更好的方法或任何建議,還請各位指導小布囉!!

拜讀<鳥毅的Blog: 動態改變RDLC報表DataSource>後,我也以SQL 2005 AdventureWorks資料庫做了一個範例:

  1. 用VS 2008開啟新的ASP.NET報表網站專案,利用報表精靈新增一個rdlc檔,連結到AdventureWorks 的Employee Table (SELECT * FROM HumanResources.Employee ),並且建立一個Web Form,透過Report Viewer來連結rdlc檔。詳細步驟請參照<Creating Client Report Definition (.rdlc) Files>,這邊就省略不說囉!! 範例專案內容如圖...image
  2. 因為無法傳遞參數給Local Report檔(rdlc),所以要做到執行階段動態修改報表內容,就必須針對報表來源下手。開啟rdlc檔(Report.rdlc),其實rdlc跟rdl一樣,都是XML檔。其中包含兩個tag <DataSetName><DataSet>,以這個範例來說,我在建立資料來源時是以預設的名稱,所以Dataset名稱為AdventureWorksDataSet,Table是Employee。應此在Report.rdlc中可以找到<DataSetName>AdventureWorksDataSet_Employee</DataSetName> 及 <DataSet Name="AdventureWorksDataSet_Employee">,這就是重點啦! 只要知道這個DataSet Name後,我們就可以動態來修改Report.rdlc的DataSource內容了!
  3. 假設小布要找出Employee中單身的員工資料,而不是用預設抓出所有資料,所以在Default.aspx的Page Load事件中修改如下:
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("AdventureWorksConnectionString").ConnectionString)
        Dim cmd As New SqlCommand("SELECT * FROM HumanResources.Employee WHERE MaritalStatus='S'", cnn)
        Dim da As New SqlDataAdapter(cmd)
        '將動態Select出來的資料填入Datatable當資料來源
        Dim dt As New DataTable
        da.Fill(dt)
        '將ReportViewer1的DataSources集合清除
        ReportViewer1.LocalReport.DataSources.Clear()
        '然後重新新增一個名稱為"AdventureWorksDataSet_Employee"的ReportDataSource給ReportViewer1
        ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("AdventureWorksDataSet_Employee", dt))
        ReportViewer1.LocalReport.Refresh()
    End Sub

將dt塞到ReportDataSource,並且將DataSource名稱設定跟Report.rdlc的DataSet名稱一樣,這樣就完成囉!! 來看一下結果吧!

[預設的DataSource]

image

[動態變更DataSource後]

image

 

 

Brian 的標籤:,,

DotBlogs Tags: ASP.NET Reporting SQL2005 posted on 2008/7/22 16:30 | 我要推薦 | 閱讀數 : 829 | 文章分類 [ Reporting ] 訂閱

Feedback

# re: 動態修改報表(RDLC)的資料來源 2008/8/28 上午 11:27 river 回覆

請教布萊恩大:
我試了很久..沒有出來..報表還是顯示空空的><
1.假設我用系統拉一個DataSet1.xsd,
.rdlc裡<DataSet Name="DataSet1_DataTable1">

那我DataTable的資料表跟資料結構要跟.xsd的一樣嗎?

2.在.aspx裡面拉一個ReportViewer1,選擇報表rdlc後,
會自動跑出ObjectDataSource1,要刪掉嗎?

先說聲謝謝您了..

# re: 動態修改報表(RDLC)的資料來源 2008/8/28 下午 02:26 fbint289 回覆

to river :
1.你如果用直接新增Dataset的方式,再透過伺服器總管去拉Table的話,資料結構是一樣的。.xsd的資料結構應該會是你想要呈現的內容欄位,如果透過精靈來產生就可以挑個別欄位,而不是全部欄位都出來。

2.ObjectDataSource是ReportViewer的資料來源,所以不能刪喔! 因為它透過TableAdapter去抓資料回來給ReportViewer...

再試試看吧! 如果還有問題我們再來討論!!

# re: 動態修改報表(RDLC)的資料來源 2008/8/29 下午 02:44 river 回覆

感謝 布萊恩大回應
初步是OK了:)

我一開始是想自己生成的DataTable塞進去報表裏面,
而這個DataTable裡面的資料天南地北 什麼都有,
後來我發現自己生成DataTable的資料欄位要跟.xsd一樣
這樣才能執行成功 XD

非常謝謝布萊恩大熱心的回覆及提供文章

標題
姓名
電子郵件 (將不會被顯示)
個人網頁
內容
登入後使用進階評論
Please add 5 and 8 and type the answer here: