如何在FastReport.NET中自定义就绪报表查看器(Viewer)

**报表控件**FastReport.NET 中用于查看报表的主要组件是 Viewer。

该查看器内置了较为完整的功能集合,可用于报表的查看、导出、打印、保存,以及执行其他相关操作。

FastReport .NET最新官方正版试用下载

这些功能在很多场景下都非常有用,但在实际项目中,并不一定每一位用户都需要完整功能。例如,对于只负责查看和打印报表的用户来说,导出报表、通过电子邮件发送等功能往往并没有实际价值。过多的导出选项反而会让界面显得复杂,用户在查找所需功能时也更容易产生困扰。

在这种情况下,更合理的做法是:只为用户保留真正需要的功能。

类似的问题也同样出现在 Combit 列表和标签报表生成器等产品中,这并非 FastReport.NET 独有的现象。

FastReport .NET最新官方正版试用下载

在报表设计器中自定义导出列表

如你所知,FastReport.NET 的报表设计器本身也支持报表预览功能,并且使用的正是同一套 Viewer。

在设计器中,可以直接对可用的导出列表进行配置。

操作路径为:

"文件" → "选项" → "用户界面"

在该界面中,点击"导出菜单"按钮,即可打开导出显示设置窗口。

在这里,你可以分别控制单个导出项或整个导出组的显示状态。如果需要快速恢复到初始状态,也可以使用"默认菜单"按钮一键还原原始设置。

例如,在某些场景下,我们可以从导出列表中移除 PDF、Office 或 XML 格式。完成设置后,在报表预览界面中,这些导出选项将不再显示。

设计器中的限制:只能控制导出列表

需要注意的是,在报表设计器中,只能对导出列表进行配置。

如果希望对 Viewer 中的其他控件(如工具栏按钮)进行更精细的控制,就需要在运行时通过代码来实现。这也是大多数实际项目中更常用的方式。

复制代码
Report report = new Report ( ) ; report.Load ( 
" App_Data / Master - Detail.frx " ) ; report.Prepare ( ) ; FastReport.Utils.Config.PreviewSettings.Buttons 
= PreviewButtons.Print | PreviewButtons.Design ; report.ShowPrepared ( ) ;  

通过代码自定义 Viewer 的按钮显示

在创建用于运行报表的应用程序时,可以在代码中设置 Viewer 的菜单和按钮显示规则。例如,可以通过 PreviewSettings 指定当前 Viewer 仅显示"打印"和"设计"按钮。

这样设置后,最终呈现给用户的 Viewer 界面会非常简洁,只保留必要操作。

需要注意的是,Viewer 中用于显示页码的输入框会同时出现。该输入框无法单独移除,否则在没有页面导航按钮的情况下,将无法在多页报表中进行跳转。

使用默认配置快速恢复 Viewer 状态

如果你的应用中包含了用于隐藏或显示预览控件的逻辑,有时可能需要将 Viewer 状态快速恢复为初始配置。

此时,可以直接将按钮配置重置为默认值,例如启用全部按钮。这在调试或切换不同使用场景时非常方便。

使用"排除法"隐藏指定功能

除了显式指定要显示哪些按钮之外,还可以反过来,只排除不希望出现的功能。

例如,可以通过配置将"发送电子邮件"按钮从 Viewer 中移除,其余功能保持默认可用。这种方式在只需要隐藏少量功能时,会更加直观和高效。

导出列表与云端导出的进一步控制

除了按钮显示之外,FastReport.NET 还支持对导出能力本身进行更精细的控制。

通过 PreviewSettings.Exports,可以编辑当前 Viewer 中可用的导出格式;

通过 PreviewSettings.Clouds,则可以配置云端导出相关的选项。

这使得 Viewer 的行为不仅可以从界面层进行裁剪,也可以从功能层进行限制,更适合对权限和使用范围有明确要求的系统。

总结

FastReport.NET 的 Viewer 并不是一个固定、不可调整的组件。

通过设计器配置和运行时代码控制,可以根据实际业务场景,对报表查看器进行裁剪和定制,让用户只看到真正需要的功能。这种方式不仅可以提升使用体验,也能让报表系统在复杂业务场景下保持清晰和高效。

留言联系我们,获取最新产品免费试用!

相关推荐
缺点内向1 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
2501_930707782 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
向上的车轮7 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
波波0079 小时前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
波波0071 天前
每日一题:中间件是如何工作的?
中间件·.net·面试题
无风听海1 天前
.NET 10之可空引用类型
数据结构·.net
码云数智-园园1 天前
基于 JSON 配置的 .NET 桌面应用自动更新实现指南
.net
无风听海1 天前
.NET 10 之dotnet run的功能
.net
岩屿1 天前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
码云数智-大飞1 天前
.NET 中高效实现 List 集合去重的多种方法详解
.net