顯示具有 Report 標籤的文章。 顯示所有文章
顯示具有 Report 標籤的文章。 顯示所有文章

2012年2月12日 星期日

RDLC (三) 第一支報表

這篇我們將介紹如何撰寫第一支RDLC報表,首先我們先來看一下整個Web站台的目錄結構
以下說明各目錄或檔案的功用
  • 在App_Code底下我們建立一個Report的目錄,用來儲放報表檔使用的資料集物件。
  • 根目錄底下的Report目錄則儲放報表檔(Customers.rdlc)。
  • first.aspx嵌入ReportViewer控制項。
  • first.aspx.cs處理ReportViewer該讀取那個報表檔及資料繫結部份。
接著我們正式開始撰寫報表,首先我們先建立資料集物件,建立資料集物件的目的在於作為報表檔的Report Data,在App_Code目錄下的Report目錄上點選滑鼠右鍵新增項目
選擇資料集並將檔名命名為Customers.xsd後按下新增按鈕,
接著我們將Toolbox裡的DataTable拖曳至設計畫面並增加相關欄位
在完成資料集後我們進行報表設計,在根目錄下的Report目錄上按滑鼠右鍵新增報表,並將報表檔名命名為Customers.rdlc
進入報表設計畫面後我們先將事先定義好的資料集加入Report Data,如果沒有看到Report Data畫面,則需要利用滑鼠點擊報表設計畫面,然後同時按下Ctrl+Alt+D鍵
在Data Source下拉選單挑選Customers及在Available datasets下拉選單挑選Customer並將Name命名為Customer
加入資料集後將頁籤切換至Toolbox,將Table控制項拖曳到報表畫面後新增一個欄位
再依序將Report Data中的Customer資料集欄位拖曳至設計畫面裡Table的Data區塊
完成報表設計後我們進行網頁程式的撰寫,以下為aspx、aspx.cs內容及執行畫面
aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="first.aspx.cs" Inherits="first" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <rsweb:ReportViewer ID="rptviewer" runat="server" Width="100%" Height="600px" />        
    </div>
    </form>
</body>
</html>
aspx.cs
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class first : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI;");
        cmd.CommandText = "SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers";
        SqlDataAdapter da = new SqlDataAdapter(cmd);

        try
        {
            da.Fill(dt);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cmd.Connection.Close();
        }

        rptviewer.LocalReport.ReportPath = Server.MapPath("/WebSite/Report/Customers.rdlc");
        rptviewer.LocalReport.DataSources.Clear();
        rptviewer.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("Customer", dt));
        rptviewer.LocalReport.Refresh();
    }
}


程式說明
  • LocalReport.ReportPath是指定報表所在路徑。
  • ReportDataSource("Customer", dt))是將dt(實際產出的資料)與資料集對應。
  • LocalReport.Refresh()使報表將資料render。

針對程式部份有幾處需要注意的
  1. aspx程式需要包含ScriptManager控制項,否則會產生錯誤。
  2. aspx.cs程式需將報表相關程式放在Page_Init事件,否則執行時畫面會一直refresh。
  3. dt的欄位名稱與資料集中的欄位名稱不同時,需要特別處理。



2012年1月31日 星期二

RDLC (二) 部署

在部署RDLC報表到Web站台後,為能確保能夠正常執行,我們必須利用下列任一方法建置執行環境
  1. 在Web Server上安裝ReportViewer.exe。
  2. 將ReportViewer相關dll檔複製到ASP.NET應用程式的Bin目錄下。
方法1開發人員須具備安裝軟體的權限,在分工較細的公司主機是由Server管理員控管,一般而言Server管理員為了主機運行正常,通常不希望主機裝載額外的應用程式,所以在這裡我們只討論方法2,首先我們要在開發環境的PC,利用"命令提示字元"將目錄切換至C:\WINDOWS\assembly\GAC_MSIL>

並執行dir Microsoft.ReportViewer.*,由結果可以看出ReportViewer相關有12個目錄
我們以Microsoft.ReportViewer.Common目錄為例,切換至Microsoft.ReportViewer.Common目錄後,可以看見二個目錄,以10開頭的目錄為ReportViewer 10,以8開頭的目錄為ReportViewer 8
由於我們使用的是ReportViewer 10,所以我們只要將10.0.0.0__b03f5f7f11d50a3a目錄下的dll檔複製到ASP.NET應用程式的Bin目錄下即可,其餘11個目錄以此類推。

詳細參考可連結至。

2012年1月26日 星期四

RDLC (一) 簡介

RDLC究竟是什麼?RDLC是Report Definition Language Client-Side的縮寫,為微軟用戶端報表定義語言,可利用Visual Studio 2005/2008/2010建立RDLC報表,那與傳統Reporting Services報表有什麼不同?Reporting Services報表是利用RDL(Report Definition Language)作為報表檔案,兩者之間差異

依建立方式
  • RDL可由Business Intelligence Development Studio的Report Designer建立。
  • RDLC可由 Visual Studio 2005/2008/2010建立。
另外RDL及RDLC皆利用XML結構描述定義,在檔案的結構描述上是相同的,差異的地方在
  • 報表伺服器利用.rdl檔的<Query>項目資訊連接到資料來源。
  • ReportViewer處理.rdlc檔時,會忽略<Query>元素。
接下來我們來看RDLC的運作架構
上方的圖例是以Web開發為例採用Local Mode,ReportViewer Control利用.rdlc檔結合ADO.NET的DataTable資料呈現報表,報表檔(.rdlc)基本上是儲存在Web站台上。
上方的圖例是以Web開發為例採用Remote Mode,ReportViewer Control透過報表伺服器上的報表檔呈現報表,這裡指的報表伺服器是SQL Server Reporting Services,在報表檔(.rdl)裡定義了執行命令及連結資訊。

Local Mode及Remote Mode的差異比較簡述如下表
Local Mode Remote Mode
報表位置 儲放在本機端。 儲放在報表伺服器上。
匯出種類 只能匯出Excel、PDF、Word
以ReportViewer 10.0為例
報表伺服器所支援的所有格式。
授權 免費。 需SQL Server License。

ReportViewer版本說明
依開發工具
  • ReportViewer 8.0   => Visual Studio 2005
  • ReportViewer 9.0   => Visual Studio 2008
  • ReportViewer 10.0 => Visual Studio 2010
提供匯出檔案的不同
  • ReportViewer 9.0   => Excel、PDF
  • ReportViewer 10.0 => Excel、PDF、Word
RDLC的優缺點

優點

缺點
  • 有助於分工
    • 系統開發人員根據商業邏輯自資料庫取出資料。
    • 報表設計人員根據報表如何呈現設計。
  • 權限控管彈性。
  • 報表設計簡單。
  • 相較於RDL,RDLC資料的篩選是交由原本的程式處理,學習曲線較短。
  • 免費(本機模式)。
  • 匯出檔案格式較少
    • ReportView   9.0=>Excel、PDF
    • ReportView 10.0=>Exel、PDF、Word
  • 報表檔儲存與管理由各系統個別處理。
  • 無快取及訂閱功能。
  • 設計階段無法預覽報表。

相關參考
將 RDLC 檔轉換為 RDL 檔
SQL Server 2008 R2 Reporting Services報表服務 尹相志、胡百敬 著