280 likes | 486 Views
RDLC 10.0. 計網中心. 產生 RDLC 報表架構. 快速建置一張 RDLC 報表 1/2. 新增 Linq to Sql, 加入 NorthWind 資料庫中的 Employees 及 Orders 資料表 新增資料集 DataSet1, 加入 NorthWind 資料庫中的 Employees 及 Orders 資料表 新增 RDLC 報表 點選 RDLC 報表的報表資料 , 加入資料集 DataSet1 中 Employees 資料表 從工具箱中拖曳資料表至 RDLC 主體. 快速建置一張 RDLC 報表 2/2. 從報表資料集中拖曳欄位至主體的資料表
E N D
RDLC 10.0 計網中心
快速建置一張RDLC報表 1/2 • 新增Linq to Sql,加入NorthWind資料庫中的Employees及Orders資料表 • 新增資料集DataSet1,加入NorthWind資料庫中的Employees及Orders資料表 • 新增RDLC報表 • 點選RDLC報表的報表資料,加入資料集DataSet1中Employees資料表 • 從工具箱中拖曳資料表至RDLC主體
快速建置一張RDLC報表 2/2 • 從報表資料集中拖曳欄位至主體的資料表 • 在網頁中加入ScriptManager、ReportViewer及linqdatasource • 在ReportViewer中設定報表來源及資料來源 • LinqDatasource指到Employee資料表 • 完成,執行。
快速建置一張RDLC子報表 1/3 • 新增RDLC報表,做為子報表,名稱定為Report2 • 點選RDLC報表的報表資料,加入資料集DataSet1中Orders資料表 • 從工具箱中拖曳資料表至RDLC主體 • 從報表資料集中拖曳欄位至主體的資料表 • 在報表資料中的參數,加入參數EmployeeID • 回到主報表中,從工具箱中拖曳子報表至主報表主體中
快速建置一張RDLC子報表 2/3 • 在主體中的子報表點選右鍵,選擇子報表屬性,設定子報表名稱為Report2,及設定參數EmployeeID資料來源為EmployeeID欄位 • 在網頁中加入一function: Private Sub SubReportProcessingEventHandler(ByVal sender As Object, ByVal e As Microsoft.Reporting.WebForms.SubreportProcessingEventArgs) Dim db As New DataClassesDataContext Dim dt = From r In db.Orders Where r.EmployeeID = e.Parameters("EmployeeID").Values.First Dim ds = New Microsoft.Reporting.WebForms.ReportDataSource(e.DataSourceNames.First, dt.ToList) e.DataSources.Add(ds) End Sub
快速建置一張RDLC子報表 3/3 • 在網頁中的Page_load事件中加入:AddHandler Me.ReportViewer1.LocalReport.SubreportProcessing, AddressOf SubReportProcessingEventHandler • 完成,執行
報表項目 • 文字方塊 • 線條 • 資料表 • 矩陣 • 矩形 • 清單 • 影像 • 子報表 • 圖表 • 量測計
文字方塊-屬性 • CanGrow:會不會為了容納更長的值而自動加大。 • CanShrink:會不會為了容納更短的值而自動縮小
資料表-屬性 • FixedColumnHeader:向下捲動時,是否固定顯示資料行標頭 • FixedRowHeaders:向右捲動時,是否固定顯示資料列標頭 • NoRowsMessage:指定沒有資料列可用時,顯示在資料區的訊息 • RepeatColumnHeaders:在每一頁是否顯示資料行標頭 • RepeatRowHeaders:在每一頁是否顯示資料列標頭
報表變數 • 在運算式使用Variables!Title.Value
自訂程式碼 • 可在報表屬性中的程式碼,加入自訂程式碼,例如:Function Gethello() As String Return "hello“End Function • 在其他元件的運算式編輯器中就可使用Code.Gethello() 呼叫自訂程式碼
報表參考 2/2 • 自訂程式碼: Function GetTest() As String Return Emp.IsEmpty End Function
當清單遇到資料表 1/2 • 在報表項目中拖曳清單至報表主體中 • 在清單中選擇Tablix屬性,資料集名稱設為DataSet1 • 在清單的列按右鍵選資料列群組->群組屬性,在群組運算式中加入City欄位 • 在清單主體中置入文字方塊及資料表,並設定好欄位
當清單遇到資料表 2/2 • 最後結果圖示如下:
報表主體分欄 • 在報表中,設定Columns=2結果如下:
結論 • 為微軟自行開發的報表組件,故其不需要注冊,也沒有使用次數的限制,也實現了RDLC報表與.Net的無縫集成。 • 簡單易用的控件,特別是Table控件,方便報表樣式的設計,且不用報表開發人員畫線條,提高了報表的開發效率。 • 靈活的可定制性,用XML來描述一個報表的相關一切。 • 支持導出Excel、PDF、Word及Jpeg格式。 Software Guide Vol.8 No.12 Dec.2009
附錄 Private Sub Export(ByVal type As String) Dim s As New Microsoft.Reporting.WebForms.LocalReport s.ReportPath = Server.MapPath("Reports\Report.rdlc") s.DataSources.Add(New ReportDataSource("DataSet1_Orders", getdata())) '注意!名稱很重要,不要亂取 'Dim strStreamIds As String() Dim strMimeType As String = String.Empty Dim strEncoding As String = String.Empty Dim strFileNameExtension As String = String.Empty 'Dim warning As Warning() 'Dim bytes As Byte() = ReportViewer1.LocalReport.Render("Excel", Nothing, strMimeType, strEncoding, strFileNameExtension, Nothing, Nothing) 'Dim bytes As Byte() = s.Render(type, Nothing, strMimeType, strEncoding, strFileNameExtension, Nothing, Nothing) 'or "Excel" Dim bytes As Byte() = s.Render("Image", Nothing, strMimeType, strEncoding, strFileNameExtension, Nothing, Nothing) 'or "Excel" Dim co_filename As String = String.Empty Select Case type Case "Excel" co_filename = ".xls" Case "PDF" co_filename = ".pdf" Case Else co_filename = ".jpg" End Select Dim strFilePath As String = Server.MapPath("report" & co_filename) Dim httpHeader As String = "attachment;filename=" & "report" & co_filename Response.AppendHeader("Content-Disposition", httpHeader) Response.ContentType = "application/octet-stream" Response.BinaryWrite(bytes) Response.End() End Sub