Crystal Reports 是經典的 .NET 報表工具。本文以 Visual Studio 專案為例,示範從資料庫連線、建立報表檔 (.rpt)、設計版面、到 ASP.NET 網頁整合預覽的完整流程,採用 **ADO.NET DataSet (Pull Model)** 方式供資料。
Xtreme.mdb (Access,Crystal Reports 安裝目錄下)Xtreme.mdb 檔案,測試連線成功CR1.rpt,選擇「使用報表精靈」 → 「標準」報表設計階段不需真實資料,只需結構描述:
Orders.xsdOrders.xsd,切換到「資料集設計師」檢視Orders 資料表拖曳到設計面 → 自動產生 DataTable 結構CR1.rpt,開啟「欄位總管」 (Field Explorer)Orders.xsd → 加入CrystalReportViewer (命名 CRV1) 到頁面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;
}
}
SetDataSource(DataTable) 推送資料。彈性高、易測試、支援多資料來源。Server.MapPath 路徑正確,.rpt 檔案屬性設為「內容」+「複製如果較新」。CRRuntime_64bit_<版本>.msi。ReportDocument 實作 IDisposable,請在 Page_Unload 或使用 using 區塊釋放:doc.Close(); doc.Dispose();。