C#中怎么做报表?有哪些常用方法和开发技巧

来源:PHP编程网作者:小师妹头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#中怎么做报表?有哪些常用方法和开发技巧》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#中怎么做报表?有哪些常用方法和开发技巧》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中制作报表,通常需要结合数据获取、展示控件和样式设计三个环节,不同的业务场景可以选择不同的实现方案,下面介绍几种常用的C#报表开发方法。

C#中怎么做报表?有哪些常用方法和开发技巧

使用DataGridView控件制作简单报表

如果只需要展示基础的表格数据,不需要复杂的排版和打印功能,使用Windows Forms自带的DataGridView控件是最快捷的方式。首先需要从数据库获取需要展示的数据,然后绑定到控件的DataSource属性即可。

以下是连接SQL Server数据库并将数据绑定到DataGridView的示例代码:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace ReportDemo
{
    public partial class SimpleReportForm : Form
    {
        public SimpleReportForm()
        {
            InitializeComponent();
            LoadReportData();
        }

        private void LoadReportData()
        {
            // 数据库连接字符串,实际使用时替换为自己的数据库信息
            string connStr = "Server=127.0.0.1;Database=TestDB;User Id=sa;Password=123456;";
            string sql = "SELECT 订单编号, 客户名称, 订单金额, 下单时间 FROM 订单表 WHERE 下单时间 >= '2024-01-01'";
            
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                // 将数据绑定到DataGridView控件
                dataGridView1.DataSource = dt;
                // 调整列宽自适应
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            }
        }
    }
}

使用ReportViewer控件制作标准报表

如果需要制作支持打印、分页、导出为PDF或Excel的标准报表,可以使用Visual Studio自带的ReportViewer控件,配合RDLC报表文件实现更丰富的报表功能。这种方式支持添加表头、表尾、统计汇总、图片等元素,适合正式的业务报表场景。

开发步骤

  • 在项目中添加新建项,选择报表类型,创建RDLC报表文件
  • 在报表文件中添加表格控件,绑定数据源字段
  • 在窗体中拖入ReportViewer控件,关联创建好的RDLC报表文件
  • 编写代码为报表提供数据源

以下是为ReportViewer控件提供数据源的示例代码:

using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WinForms;

namespace ReportDemo
{
    public partial class StandardReportForm : Form
    {
        public StandardReportForm()
        {
            InitializeComponent();
            LoadReport();
        }

        private void LoadReport()
        {
            string connStr = "Server=127.0.0.1;Database=TestDB;User Id=sa;Password=123456;";
            string sql = "SELECT 产品名称, 销售数量, 销售金额 FROM 销售明细表";
            
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                adapter.Fill(dt);
            }
            
            // 设置报表数据源
            ReportDataSource rds = new ReportDataSource("SalesDataSet", dt);
            reportViewer1.LocalReport.DataSources.Clear();
            reportViewer1.LocalReport.DataSources.Add(rds);
            // 指定RDLC报表文件路径,实际使用时替换为自己的报表路径
            reportViewer1.LocalReport.ReportPath = "SalesReport.rdlc";
            // 刷新报表显示
            reportViewer1.RefreshReport();
        }
    }
}

自定义绘制复杂报表

如果报表有特殊的排版需求,比如需要合并单元格、自定义绘制表头样式、添加复杂的统计图表,也可以使用GDI+自定义绘制报表内容,这种方式灵活性最高,但是开发成本也相对更高,适合有特殊定制化需求的场景。

以下是使用GDI+在Panel控件上绘制简单报表表头的示例代码:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ReportDemo
{
    public partial class CustomReportForm : Form
    {
        public CustomReportForm()
        {
            InitializeComponent();
            panel1.Paint += Panel1_Paint;
        }

        private void Panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            // 设置绘制质量
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            // 绘制报表标题
            Font titleFont = new Font("微软雅黑", 16, FontStyle.Bold);
            SolidBrush titleBrush = new SolidBrush(Color.Black);
            string title = "2024年第一季度销售报表";
            SizeF titleSize = g.MeasureString(title, titleFont);
            float titleX = (panel1.Width - titleSize.Width) / 2;
            g.DrawString(title, titleFont, titleBrush, titleX, 10);
            
            // 绘制分隔线
            Pen linePen = new Pen(Color.Gray, 1);
            g.DrawLine(linePen, 10, 40, panel1.Width - 10, 40);
            
            // 释放资源
            titleFont.Dispose();
            titleBrush.Dispose();
            linePen.Dispose();
        }
    }
}

报表开发注意事项

  • 数据库连接字符串不要硬编码在代码中,建议放在配置文件里方便后续修改
  • 如果报表数据量较大,建议添加分页查询逻辑,避免一次性加载过多数据导致内存占用过高
  • 导出报表时如果需要兼容旧版本的Office,建议生成xls格式而不是xlsx格式
  • 报表的样式尽量保持统一,字体、颜色、间距符合项目的整体设计规范

C#报表开发DataGridViewReportViewerSQL_Server修改时间:2026-06-15 20:36:44

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。