C# 報表框架開發指南

介紹

本指南將介紹如何使用 C# WebForm 來開發 報表框架,適用於企業管理、銷售分析、財務報表等場景,並透過,並透過 GridView 來顯示數據,包含 分頁、搜尋與 Excel 匯出 功能。


數據模型設計

訂單報表模型 (OrderReport)

public class OrderReport
{
    public int OrderID { get; set; }
    public string CustomerName { get; set; }
    public DateTime OrderDate { get; set; }
    public decimal TotalAmount { get; set; }
    public List<OrderItem> Items { get; set; }
}

訂單項目模型 (OrderItem)

public class OrderItem
{
    public int ItemID { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal TotalPrice => Quantity * UnitPrice;
}

後端開發 (C# WebForm)

報表數據服務 (ReportService)

public class ReportService
{
    public static List<OrderReport> GetReport(string customerName = "")
    {
        var reports = new List<OrderReport>
        {
            new OrderReport { OrderID = 1, CustomerName = "王小明", OrderDate = DateTime.Now.AddDays(-2), TotalAmount = 5000,
                Items = new List<OrderItem>
                {
                    new OrderItem { ItemID = 101, ProductName = "筆記本", Quantity = 2, UnitPrice = 500 },
                    new OrderItem { ItemID = 102, ProductName = "滑鼠", Quantity = 1, UnitPrice = 1500 }
                }
            }
        };

        if (!string.IsNullOrEmpty(customerName))
        {
            reports = reports.Where(r => r.CustomerName.Contains(customerName)).ToList();
        }
        return reports;
    }
}

WebForm 程式碼 (ReportPage.aspx.cs)

public partial class ReportPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) LoadReport();
    }

    private void LoadReport()
    {
        List<OrderReport> reportList = ReportService.GetReport();
        gvOrders.DataSource = reportList;
        gvOrders.DataBind();
    }

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        string customerName = txtCustomerName.Text.Trim();
        gvOrders.DataSource = ReportService.GetReport(customerName);
        gvOrders.DataBind();
    }
}

Excel 匯出功能

protected void btnExportExcel_Click(object sender, EventArgs e)
{
    List<OrderReport> reportList = ReportService.GetReport();
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("訂單編號,客戶名稱,訂單日期,總金額");
    foreach (var report in reportList)
    {
        sb.AppendLine($"{report.OrderID},{report.CustomerName},{report.OrderDate:yyyy-MM-dd},{report.TotalAmount}");
    }
    Response.Clear();
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "attachment; filename=Orders.csv");
    Response.Write(sb.ToString());
    Response.End();
}

前端頁面 (ReportPage.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportPage.aspx.cs" Inherits="ReportPage" %>
<!DOCTYPE html>
<html>
<head>
    <title>訂單報表</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="txtCustomerName" runat="server" Placeholder="輸入客戶名稱"></asp:TextBox>
        <asp:Button ID="btnSearch" runat="server" Text="搜尋" OnClick="btnSearch_Click" />
        <asp:Button ID="btnExportExcel" runat="server" Text="匯出 Excel" OnClick="btnExportExcel_Click" />
        <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="True" AllowPaging="True" PageSize="10" OnPageIndexChanging="gvOrders_PageIndexChanging">
        </asp:GridView>
    </form>
</body>
</html>

框架操作手冊

  1. 報表加載: 頁面加載時,自動執行 LoadReport(),顯示報表。
  2. 搜尋功能: 使用 txtCustomerName 輸入客戶名稱後,點擊「搜尋」,篩選結果。
  3. 分頁功能: GridView 啟用 AllowPaging=True,點擊頁碼時會載入對應頁數。
  4. 匯出功能: 點擊「匯出 Excel」按鈕,執行 btnExportExcel_Click(),下載 CSV 檔案。
  5. 擴展性建議: 可增加 btnExportPDF_Click() 以支援 PDF 匯出,或結合 AJAX 來提高篩選效能。

結論

透過本框架,開發者可以 快速建置報表系統,支援 資料篩選、分頁、匯出功能,並能夠擴展至 PDF 匯出、AJAX 即時查詢等進階功能。希望本指南對你的開發有所幫助!

Last modification:February 16, 2025
If you think my article is useful to you, please feel free to appreciate