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

ASP.NET 三層架構整合 Crystal Reports 產出銷售圖表報表

     編輯:關於ASP.NET

專案背景與架構概覽

企業級應用常需產出專業報表以輔助決策。本文以一個銷售部門報表系統為例,示範如何在 ASP.NET 三層架構中整合 Crystal Reports,實現銷售趨勢的列表與折線圖呈現。系統採用 SQL Server 2000 做為資料層,VB.NET 實作商務邏輯層,C# 負責表現層,展現跨語言協作的彈性。

資料庫結構設計

核心三張資料表關聯如下:

  • tblItem:商品主檔,含 ItemId、Description
  • tblSalesPerson:銷售人員主檔,含 SalesPersonId、UserName、Password
  • tblSales:銷售交易記錄,含 SaleId、SalesPersonId、ItemId、SaleDate、Amount

建立資料表與關聯的 T-SQL 腳本

CREATE TABLE [dbo].[tblItem] (
    [ItemId] [int] NOT NULL,
    [Description] [varchar] (50) NOT NULL
) ON [PRIMARY];

CREATE TABLE [dbo].[tblSalesPerson] (
    [SalesPersonId] [int] NOT NULL,
    [UserName] [varchar] (50) NOT NULL,
    [Password] [varchar] (30) NOT NULL
) ON [PRIMARY];

CREATE TABLE [dbo].[tblSales] (
    [SaleId] [int] IDENTITY (1, 1) NOT NULL,
    [SalesPersonId] [int] NOT NULL,
    [ItemId] [int] NOT NULL,
    [SaleDate] [datetime] NOT NULL,
    [Amount] [int] NOT NULL
) ON [PRIMARY];

-- 主鍵與外鍵約束
ALTER TABLE tblItem ADD CONSTRAINT PK_ItemId PRIMARY KEY (ItemId);
ALTER TABLE tblSalesPerson ADD CONSTRAINT PK_SalesPersonId PRIMARY KEY (SalesPersonId);
ALTER TABLE tblSales ADD CONSTRAINT FK_ItemId FOREIGN KEY (ItemId) REFERENCES tblItem(ItemId);
ALTER TABLE tblSales ADD CONSTRAINT FK_SalesPersonId FOREIGN KEY (SalesPersonId) REFERENCES tblSalesPerson(SalesPersonId);

Crystal Reports 整合關鍵步驟

  1. 建立 .rpt 報表檔:在 Visual Studio 中新增 Crystal Report,選擇「標準報表」,透過資料庫專家連接 SQL Server,將上述三張表加入並設定關聯(Inner Join)。
  2. 設計報表版面:
    • 「詳細區段」放置交易明細欄位:銷售員、商品、日期、金額。
    • 「群組區段」依銷售員或日期分群,並插入「彙總欄位」計算小計。
    • 「報表頁尾」或「群組頁尾」插入「圖表專家」,選擇「折線圖」,X 軸為日期,Y 軸為金額總和,即可視覺化銷售趨勢。
  3. 參數化報表:新增參數 @StartDate、@EndDate,於「選取專家」設定記錄篩選公式:{tblSales.SaleDate} in {@StartDate} to {@EndDate}。
  4. ASP.NET 頁面載入報表(C# 程式碼後置):
    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Shared;
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ReportDocument rpt = new ReportDocument();
            rpt.Load(Server.MapPath("~/Reports/SalesTrend.rpt"));
            
            // 設定資料庫登入資訊
            ConnectionInfo connInfo = new ConnectionInfo();
            connInfo.ServerName = "localhost";
            connInfo.DatabaseName = "SalesDB";
            connInfo.UserID = "sa";
            connInfo.Password = "your_password";
            
            foreach (TableLogOnInfo logOnInfo in rpt.Database.Tables[0].LogOnInfo)
            {
                logOnInfo.ConnectionInfo = connInfo;
                rpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
            }
            
            // 傳遞參數
            rpt.SetParameterValue("@StartDate", DateTime.Now.AddMonths(-1));
            rpt.SetParameterValue("@EndDate", DateTime.Now);
            
            CrystalReportViewer1.ReportSource = rpt;
        }
    }
    

三層架構職責劃分

層級技術主要職責
資料層SQL Server 2000資料儲存、預存程序、檢視表
商務邏輯層VB.NET (Class Library)資料存取封裝、業務規則驗證、報表資料集準備
表現層C# (ASP.NET Web Forms)頁面生命週期、參數收集、CrystalReportViewer 控制項繫結

實務提醒與最佳化

  • 授權問題:部署至伺服器需安裝 Crystal Reports Runtime,並確認授權模式(合座授權 vs. 命名使用者)。
  • 效能優化:大量資料報表建議使用「資料庫命令」或預存程序在資料庫端完成彙總,避免將明細資料全撈至應用端再計算。
  • 記憶體管理:ReportDocument 實作 IDisposable,務必於 Page_Unload 或 using 區塊中呼叫 rpt.Close()、rpt.Dispose() 釋放非受控資源。
  • 匯出功能:CrystalReportViewer 內建匯出 PDF、Excel、Word,無需額外程式碼即可滿足使用者下載需求。

結語

透過 Crystal Reports 強大的排版與圖表引擎,配合 ASP.NET 三層架構的清晰分工,能快速建構出專業且可維護的企業報表系統。關鍵在於報表設計階段善用資料庫端運算、參數化查詢,以及部署時正確配置執行環境與記憶體釋放機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved