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>
框架操作手冊
- 報表加載: 頁面加載時,自動執行
LoadReport()
,顯示報表。 - 搜尋功能: 使用
txtCustomerName
輸入客戶名稱後,點擊「搜尋」,篩選結果。 - 分頁功能: GridView 啟用
AllowPaging=True
,點擊頁碼時會載入對應頁數。 - 匯出功能: 點擊「匯出 Excel」按鈕,執行
btnExportExcel_Click()
,下載 CSV 檔案。 - 擴展性建議: 可增加
btnExportPDF_Click()
以支援 PDF 匯出,或結合 AJAX 來提高篩選效能。
結論
透過本框架,開發者可以 快速建置報表系統,支援 資料篩選、分頁、匯出功能,並能夠擴展至 PDF 匯出、AJAX 即時查詢等進階功能。希望本指南對你的開發有所幫助!