首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Crystal Reports 入門:建立第一張報表完整步驟 (ADO.NET 資料集模式)

     編輯:關於C#

Crystal Reports 是經典的 .NET 報表工具。本文以 Visual Studio 專案為例,示範從資料庫連線、建立報表檔 (.rpt)、設計版面、到 ASP.NET 網頁整合預覽的完整流程,採用 **ADO.NET DataSet (Pull Model)** 方式供資料。

環境準備

  • Visual Studio 安裝 Crystal Reports for Visual Studio (SP 版本)
  • 範例資料庫:Xtreme.mdb (Access,Crystal Reports 安裝目錄下)

步驟 1:建立資料庫連線 (Server Explorer)

  1. 開啟「伺服器總管」 → 右鍵「資料連線」 → 「加入連線」
  2. 資料來源選「Microsoft Access Database File (OLE DB)」
  3. 選取 Xtreme.mdb 檔案,測試連線成功

步驟 2:新增 Crystal Report 項目

  1. 專案右鍵 → 「加入」 → 「新增項目」 → 「Crystal Report」
  2. 命名 CR1.rpt,選擇「使用報表精靈」 → 「標準」
  3. 資料來源選「ADO.NET (XML)」→ 下一步

步驟 3:建立 XML Schema (.xsd) 定義資料結構

報表設計階段不需真實資料,只需結構描述:

  1. 專案加入新項目 → 「XML Schema」 → 命名 Orders.xsd
  2. 開啟 Orders.xsd,切換到「資料集設計師」檢視
  3. 從 Server Explorer 將 Orders 資料表拖曳到設計面 → 自動產生 DataTable 結構
  4. **刪除自動產生的 TableAdapter** (報表只需結構,不需適配器)

步驟 4:報表綁定 Schema 欄位

  1. 開啟 CR1.rpt,開啟「欄位總管」 (Field Explorer)
  2. 右鍵「資料庫欄位」 → 「資料庫專家」
  3. 展開「專案資料」 → 「ADO.NET 資料集」 → 選擇 Orders.xsd → 加入
  4. 將所需欄位 (OrderID, OrderAmount, OrderDate, Shipped, AmountPaid) 拖曳到「詳細資料」區段
  5. 頁首會自動產生對應標題

步驟 5:ASPX 網頁整合 CrystalReportViewer

  1. 工具箱拖曳 CrystalReportViewer (命名 CRV1) 到頁面
  2. 頁面 Page_Load 撰寫資料載入與報表繫結程式碼:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack) return;

    string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Xtreme.mdb;Persist Security Info=True";
    string sql = "SELECT * FROM Orders";

    using (var da = new OleDbDataAdapter(sql, connStr))
    {
        var dt = new DataTable();
        da.Fill(dt);

        // 可選:存入 Session 供分頁/匯出使用
        Session["ReportData"] = dt;

        var doc = new ReportDocument();
        doc.Load(Server.MapPath("~/CR1.rpt"));
        doc.SetDataSource(dt); // 關鍵:將 DataTable 推送給報表 (Pull Model)

        CRV1.ReportSource = doc;
    }
}

關鍵架構概念:Pull Model vs Push Model

  • Pull Model (本文):報表檔 (.rpt) 只定義版面與欄位對應,**不含資料**。執行時由程式碼 SetDataSource(DataTable) 推送資料。彈性高、易測試、支援多資料來源。
  • Push Model:報表內嵌 SQL/連線資訊,執行時主動查詢資料庫。部署簡單但耦合度高、難以單元測試。

常見問題與解決

  • 「找不到報表檔」:確認 Server.MapPath 路徑正確,.rpt 檔案屬性設為「內容」+「複製如果較新」。
  • 欄位資料型別不符:.xsd 定義型別需與資料庫實際型別相容 (如 DB 為 Number,xsd 定為 Int32/Decimal)。
  • 部署伺服器缺少 Crystal Reports Runtime:生產機需安裝對應版本的 CRRuntime_64bit_<版本>.msi。
  • 記憶體洩漏:ReportDocument 實作 IDisposable,請在 Page_Unload 或使用 using 區塊釋放:doc.Close(); doc.Dispose();。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved