RDLC打印无反应主因是数据源未正确绑定或时机错误;FastReport跨平台需避免GDI+依赖;RDLC中文乱码须指定Windows内置中文字体;FastReport动态绑定需用表达式而非直接赋值。

RDLC 报表在 WinForms 里点打印没反应,ReportViewer 不报错但空白
根本原因通常是数据源没真正绑定到 ReportDataSource,或者绑定时机不对。WinForms 的 ReportViewer 不会自动刷新,也不提示“数据为空”这种软错误。
- 确保在调用
RefreshReport()前,已把DataTable或List赋给ReportDataSource.Value,不是只设了Name - 检查
ReportDataSource.Name是否和 RDLC 设计器里数据集的名称(右键报表 → “报表数据”面板里的名称)**完全一致**,大小写敏感 - 如果数据来自异步加载(比如
await LoadDataAsync()),必须在 UI 线程上设置数据源并调用RefreshReport(),否则控件不更新 - RDLC 文件属性中,“生成操作”必须是
Embedded Resource,否则运行时找不到.rdlc文件,ReportViewer静默失败
FastReport .NET Core 6+ 项目里 Report.Show() 报错:找不到 System.Drawing.Common
FastReport 默认依赖 GDI+,而 .NET Core / .NET 5+ 在 Linux/macOS 上默认不支持 System.Drawing.Common,Windows 上也需额外安装运行时组件。
- Windows 开发机:安装 .NET 6 Runtime Desktop Hosting Bundle,它包含 GDI+ 支持
- 跨平台部署:改用
Report.Prepare()+Export(如PdfExport),避免调用Show()或Print()这类 UI/GDI 相关方法 - 若必须用预览窗体,在
.csproj中显式引用:,并确认目标框架是net6.0-windows而非纯net6.0 - FastReport v2023.4+ 开始提供
FastReport.Core包,专为跨平台设计,但不支持所有传统组件(如某些图表、条码),需验证功能覆盖度
RDLC 导出 PDF 中文乱码,字体显示为方块
RDLC 渲染 PDF 时默认用 Windows 内置字体(如 Microsoft Sans Serif),不嵌入中文字体,且不识别 CSS 字体栈或系统已安装的思源黑体等。
- 必须在 RDLC 设计器中,选中文本框 → 属性面板 →
FontFamily改为SimSun(宋体)、Microsoft YaHei(微软雅黑)等 Windows 常驻中文字体 - 不要用
"Noto Sans CJK SC"或"PingFang SC"这类 macOS/Linux 字体名,RDLC 渲染器不认识 - 导出前可临时设置
LocalReport.SetBasePermissionsForSandboxAppDomain(仅限旧版 .NET Framework),但更稳妥的是:确保服务器装有对应中文字体,且 IIS/服务账户有读取权限 - PDF 导出不支持字体嵌入,所以不能靠“打包字体文件”解决;唯一可控路径是统一环境字体 + 显式指定 FontFamily
FastReport 动态绑定 List,字段显示 System.Collections.Generic.List`1[Order]
System.Collections.Generic.List`1[Order]这是把整个集合对象直接塞进了 TextObject.Text,而不是用 [Orders.[0].CustomerName] 这类表达式访问具体字段。
- 在 FastReport 设计器中,拖一个
TextObject到 Band(如MasterData),右键 → “编辑表达式”,输入类似[Orders.CustomerName]—— 注意这里Orders是你注册的数据源名称,不是变量名 - 注册数据源时用
report.RegisterData(list, "Orders"),第二个参数字符串必须和表达式里一致 - 如果
Order类有属性是public string? Name { get; set; },表达式写[Orders.Name]即可,不需要加?.或空值判断;FastReport 会自动转成空字符串 - 别在代码里手动拼接
TextObject.Text = list[0].Name,这只会静态渲染第一条,失去报表引擎的循环、分页、分组能力
RDLC 和 FastReport 表面都是“拖控件+绑数据”,但底层数据流模型完全不同:RDLC 依赖强类型数据集与编译时校验,FastReport 依赖运行时表达式解析与松散命名匹配。混用两者的调试习惯(比如查变量名 vs 查数据源名)是多数人卡住的第一步。











