翼度科技»论坛 编程开发 .net 查看内容

在WPF应用中使用FastReport.WPF报表模块

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
FastReport是一个非常不错的报表组件,在Winform应用中常常使用它进行报表的设计、预览展现、打印或者导出文件(PDF、Excel)等,可以设计打印各种各样的报表,本篇随笔继续介绍当前最新的FastReport报表模块,其中FastReport.WPF是专门针对WPF的报表组件。
1、回顾FastReport应用

我们回顾一下,我之前在随笔中总结的一些FastReport应用案例,虽然WPF使用上有所差异,不过报表的格式是同样的,处理规则也是大同小异。
使用FastReport报表工具生成标签打印文档》、《使用FastReport报表工具生成图片格式文档》、《使用FastReport报表工具生成报表PDF文档》、《使用FastReport报表工具实现信封套打功能》、《在Winform开发中使用FastReport创建报表》、《在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表》、《利用FastReport传递图片参数,在报表上展示签名信息》,可以说在Winform报表处理中,我还是比较喜欢FastReport的的纯.net开发的报表组件。
我们可以看到,FastReport报表还是非常强大的,可以处理各种不同的报表展示。



 
2、FastReport.WPF报表模块的使用

FastReport.WPF 报表模块是2023年底才出来的一款专门针对WPF的报表应用,我们在Nugget上搜索FastReport.WPF,添加对应的FastReport.WPF.Demo模块就可以在我们的WPF应用中添加测试版本的FastReport.WPF组件了,如果我们有正式版本,也可以安装后直接添加本地引用文件即可。

报表的预览和设计可以通过直接在WPF后端代码打开对应的报表组件实现相应的效果,也可以通过在页面中展示对应组件(预览组件、设计组件)来承载报表信息,我们针对两种情况分别进行相关的说明。
我们在WPF的应用端中添加一个报表的测试页面,用来测试FastReport的报表处理,如下界面所示。

一般的FastReport报表的处理,差不多就是那几个步骤:
  1、创建报表对象
  2、加载报表文件
  3、加载报表相关数据或者参数
  4、调用报表设计或者预览处理。
我们来看看简单的按钮单击调用报表的处理,如下代码所示。
  1. /// <summary>
  2. /// 报表预览
  3. /// </summary>
  4. private async void btnPreviewReport_Click(object sender, RoutedEventArgs e)
  5. {
  6.     var reportFile = Path.Combine(baseDir, "Report/Simple List.frx");
  7.     using (var report = new Report())
  8.     {
  9. <StackPanel
  10.     x:Name="reportPanel"
  11.     Grid.Row="2"
  12.     Grid.ColumnSpan="3"
  13.     Margin="10">
  14.     <<strong>Preview:WpfPreviewControl
  15.         </strong>x:Name="previewControl"
  16.         Height="600"
  17.         Margin="10"
  18.         ToolbarVisible="False" />
  19.     <<strong>Design:WpfDesignerControl
  20.         </strong>x:Name="designerControl"
  21.         Height="600"
  22.         Margin="10" />
  23. </StackPanel>//加载报表
  24. <StackPanel
  25.     x:Name="reportPanel"
  26.     Grid.Row="2"
  27.     Grid.ColumnSpan="3"
  28.     Margin="10">
  29.     <<strong>Preview:WpfPreviewControl
  30.         </strong>x:Name="previewControl"
  31.         Height="600"
  32.         Margin="10"
  33.         ToolbarVisible="False" />
  34.     <<strong>Design:WpfDesignerControl
  35.         </strong>x:Name="designerControl"
  36.         Height="600"
  37.         Margin="10" />
  38. </StackPanel>report.Load(reportFile);
  39. <StackPanel
  40.     x:Name="reportPanel"
  41.     Grid.Row="2"
  42.     Grid.ColumnSpan="3"
  43.     Margin="10">
  44.     <<strong>Preview:WpfPreviewControl
  45.         </strong>x:Name="previewControl"
  46.         Height="600"
  47.         Margin="10"
  48.         ToolbarVisible="False" />
  49.     <<strong>Design:WpfDesignerControl
  50.         </strong>x:Name="designerControl"
  51.         Height="600"
  52.         Margin="10" />
  53. </StackPanel>//创建数据源
  54. <StackPanel
  55.     x:Name="reportPanel"
  56.     Grid.Row="2"
  57.     Grid.ColumnSpan="3"
  58.     Margin="10">
  59.     <<strong>Preview:WpfPreviewControl
  60.         </strong>x:Name="previewControl"
  61.         Height="600"
  62.         Margin="10"
  63.         ToolbarVisible="False" />
  64.     <<strong>Design:WpfDesignerControl
  65.         </strong>x:Name="designerControl"
  66.         Height="600"
  67.         Margin="10" />
  68. </StackPanel>var ds = GetNorthWindDataSet();
  69. <StackPanel
  70.     x:Name="reportPanel"
  71.     Grid.Row="2"
  72.     Grid.ColumnSpan="3"
  73.     Margin="10">
  74.     <<strong>Preview:WpfPreviewControl
  75.         </strong>x:Name="previewControl"
  76.         Height="600"
  77.         Margin="10"
  78.         ToolbarVisible="False" />
  79.     <<strong>Design:WpfDesignerControl
  80.         </strong>x:Name="designerControl"
  81.         Height="600"
  82.         Margin="10" />
  83. </StackPanel>//绑定数据源
  84. <StackPanel
  85.     x:Name="reportPanel"
  86.     Grid.Row="2"
  87.     Grid.ColumnSpan="3"
  88.     Margin="10">
  89.     <<strong>Preview:WpfPreviewControl
  90.         </strong>x:Name="previewControl"
  91.         Height="600"
  92.         Margin="10"
  93.         ToolbarVisible="False" />
  94.     <<strong>Design:WpfDesignerControl
  95.         </strong>x:Name="designerControl"
  96.         Height="600"
  97.         Margin="10" />
  98. </StackPanel>report.RegisterData(ds, "NorthWind");
  99. <StackPanel
  100.     x:Name="reportPanel"
  101.     Grid.Row="2"
  102.     Grid.ColumnSpan="3"
  103.     Margin="10">
  104.     <<strong>Preview:WpfPreviewControl
  105.         </strong>x:Name="previewControl"
  106.         Height="600"
  107.         Margin="10"
  108.         ToolbarVisible="False" />
  109.     <<strong>Design:WpfDesignerControl
  110.         </strong>x:Name="designerControl"
  111.         Height="600"
  112.         Margin="10" />
  113. </StackPanel>//运行报表
  114. <StackPanel
  115.     x:Name="reportPanel"
  116.     Grid.Row="2"
  117.     Grid.ColumnSpan="3"
  118.     Margin="10">
  119.     <<strong>Preview:WpfPreviewControl
  120.         </strong>x:Name="previewControl"
  121.         Height="600"
  122.         Margin="10"
  123.         ToolbarVisible="False" />
  124.     <<strong>Design:WpfDesignerControl
  125.         </strong>x:Name="designerControl"
  126.         Height="600"
  127.         Margin="10" />
  128. </StackPanel>report.Show();
  129.     }
  130. }
  131. /// <summary>
  132. /// 报表设计
  133. /// </summary>
  134. private void btnDesignReport_Click(object sender, RoutedEventArgs e)
  135. {
  136.     var reportFile = Path.Combine(baseDir, "Report/Simple List.frx");
  137.     using (var report = new Report())
  138.     {
  139. <StackPanel
  140.     x:Name="reportPanel"
  141.     Grid.Row="2"
  142.     Grid.ColumnSpan="3"
  143.     Margin="10">
  144.     <<strong>Preview:WpfPreviewControl
  145.         </strong>x:Name="previewControl"
  146.         Height="600"
  147.         Margin="10"
  148.         ToolbarVisible="False" />
  149.     <<strong>Design:WpfDesignerControl
  150.         </strong>x:Name="designerControl"
  151.         Height="600"
  152.         Margin="10" />
  153. </StackPanel>//加载报表
  154. <StackPanel
  155.     x:Name="reportPanel"
  156.     Grid.Row="2"
  157.     Grid.ColumnSpan="3"
  158.     Margin="10">
  159.     <<strong>Preview:WpfPreviewControl
  160.         </strong>x:Name="previewControl"
  161.         Height="600"
  162.         Margin="10"
  163.         ToolbarVisible="False" />
  164.     <<strong>Design:WpfDesignerControl
  165.         </strong>x:Name="designerControl"
  166.         Height="600"
  167.         Margin="10" />
  168. </StackPanel>report.Load(reportFile);
  169. <StackPanel
  170.     x:Name="reportPanel"
  171.     Grid.Row="2"
  172.     Grid.ColumnSpan="3"
  173.     Margin="10">
  174.     <<strong>Preview:WpfPreviewControl
  175.         </strong>x:Name="previewControl"
  176.         Height="600"
  177.         Margin="10"
  178.         ToolbarVisible="False" />
  179.     <<strong>Design:WpfDesignerControl
  180.         </strong>x:Name="designerControl"
  181.         Height="600"
  182.         Margin="10" />
  183. </StackPanel>//创建数据源
  184. <StackPanel
  185.     x:Name="reportPanel"
  186.     Grid.Row="2"
  187.     Grid.ColumnSpan="3"
  188.     Margin="10">
  189.     <<strong>Preview:WpfPreviewControl
  190.         </strong>x:Name="previewControl"
  191.         Height="600"
  192.         Margin="10"
  193.         ToolbarVisible="False" />
  194.     <<strong>Design:WpfDesignerControl
  195.         </strong>x:Name="designerControl"
  196.         Height="600"
  197.         Margin="10" />
  198. </StackPanel>var ds = GetNorthWindDataSet();
  199. <StackPanel
  200.     x:Name="reportPanel"
  201.     Grid.Row="2"
  202.     Grid.ColumnSpan="3"
  203.     Margin="10">
  204.     <<strong>Preview:WpfPreviewControl
  205.         </strong>x:Name="previewControl"
  206.         Height="600"
  207.         Margin="10"
  208.         ToolbarVisible="False" />
  209.     <<strong>Design:WpfDesignerControl
  210.         </strong>x:Name="designerControl"
  211.         Height="600"
  212.         Margin="10" />
  213. </StackPanel>//绑定数据源
  214. <StackPanel
  215.     x:Name="reportPanel"
  216.     Grid.Row="2"
  217.     Grid.ColumnSpan="3"
  218.     Margin="10">
  219.     <<strong>Preview:WpfPreviewControl
  220.         </strong>x:Name="previewControl"
  221.         Height="600"
  222.         Margin="10"
  223.         ToolbarVisible="False" />
  224.     <<strong>Design:WpfDesignerControl
  225.         </strong>x:Name="designerControl"
  226.         Height="600"
  227.         Margin="10" />
  228. </StackPanel>report.RegisterData(ds, "NorthWind");
  229. <StackPanel
  230.     x:Name="reportPanel"
  231.     Grid.Row="2"
  232.     Grid.ColumnSpan="3"
  233.     Margin="10">
  234.     <<strong>Preview:WpfPreviewControl
  235.         </strong>x:Name="previewControl"
  236.         Height="600"
  237.         Margin="10"
  238.         ToolbarVisible="False" />
  239.     <<strong>Design:WpfDesignerControl
  240.         </strong>x:Name="designerControl"
  241.         Height="600"
  242.         Margin="10" />
  243. </StackPanel>//运行报表
  244. <StackPanel
  245.     x:Name="reportPanel"
  246.     Grid.Row="2"
  247.     Grid.ColumnSpan="3"
  248.     Margin="10">
  249.     <<strong>Preview:WpfPreviewControl
  250.         </strong>x:Name="previewControl"
  251.         Height="600"
  252.         Margin="10"
  253.         ToolbarVisible="False" />
  254.     <<strong>Design:WpfDesignerControl
  255.         </strong>x:Name="designerControl"
  256.         Height="600"
  257.         Margin="10" />
  258. </StackPanel>report.Design();
  259.     }
  260. }
复制代码
当然我们也可以在Xaml中定义Command来处理对应的按钮事件。

 Xam界面代码如下所示:
  1. <ui:CardAction
  2.     Grid.Row="0"
  3.     Grid.Column="0"
  4.     Margin="0,0,14,0"
  5.     Padding="0"
  6.     VerticalAlignment="Stretch"
  7.     Command="{Binding DataContext.PreviewReportCommand, Mode=OneWay}"
  8.     CommandParameter="Simple List.frx"
  9.     IsChevronVisible="False">
  10.     <Grid>
  11. <StackPanel
  12.     x:Name="reportPanel"
  13.     Grid.Row="2"
  14.     Grid.ColumnSpan="3"
  15.     Margin="10">
  16.     <<strong>Preview:WpfPreviewControl
  17.         </strong>x:Name="previewControl"
  18.         Height="600"
  19.         Margin="10"
  20.         ToolbarVisible="False" />
  21.     <<strong>Design:WpfDesignerControl
  22.         </strong>x:Name="designerControl"
  23.         Height="600"
  24.         Margin="10" />
  25. </StackPanel><Grid.ColumnDefinitions>
  26. <StackPanel
  27.     x:Name="reportPanel"
  28.     Grid.Row="2"
  29.     Grid.ColumnSpan="3"
  30.     Margin="10">
  31.     <<strong>Preview:WpfPreviewControl
  32.         </strong>x:Name="previewControl"
  33.         Height="600"
  34.         Margin="10"
  35.         ToolbarVisible="False" />
  36.     <<strong>Design:WpfDesignerControl
  37.         </strong>x:Name="designerControl"
  38.         Height="600"
  39.         Margin="10" />
  40. </StackPanel>    <ColumnDefinition Width="Auto" />
  41. <StackPanel
  42.     x:Name="reportPanel"
  43.     Grid.Row="2"
  44.     Grid.ColumnSpan="3"
  45.     Margin="10">
  46.     <<strong>Preview:WpfPreviewControl
  47.         </strong>x:Name="previewControl"
  48.         Height="600"
  49.         Margin="10"
  50.         ToolbarVisible="False" />
  51.     <<strong>Design:WpfDesignerControl
  52.         </strong>x:Name="designerControl"
  53.         Height="600"
  54.         Margin="10" />
  55. </StackPanel>    <ColumnDefinition Width="*" />
  56. <StackPanel
  57.     x:Name="reportPanel"
  58.     Grid.Row="2"
  59.     Grid.ColumnSpan="3"
  60.     Margin="10">
  61.     <<strong>Preview:WpfPreviewControl
  62.         </strong>x:Name="previewControl"
  63.         Height="600"
  64.         Margin="10"
  65.         ToolbarVisible="False" />
  66.     <<strong>Design:WpfDesignerControl
  67.         </strong>x:Name="designerControl"
  68.         Height="600"
  69.         Margin="10" />
  70. </StackPanel></Grid.ColumnDefinitions>
  71. <StackPanel
  72.     x:Name="reportPanel"
  73.     Grid.Row="2"
  74.     Grid.ColumnSpan="3"
  75.     Margin="10">
  76.     <<strong>Preview:WpfPreviewControl
  77.         </strong>x:Name="previewControl"
  78.         Height="600"
  79.         Margin="10"
  80.         ToolbarVisible="False" />
  81.     <<strong>Design:WpfDesignerControl
  82.         </strong>x:Name="designerControl"
  83.         Height="600"
  84.         Margin="10" />
  85. </StackPanel><Image
  86. <StackPanel
  87.     x:Name="reportPanel"
  88.     Grid.Row="2"
  89.     Grid.ColumnSpan="3"
  90.     Margin="10">
  91.     <<strong>Preview:WpfPreviewControl
  92.         </strong>x:Name="previewControl"
  93.         Height="600"
  94.         Margin="10"
  95.         ToolbarVisible="False" />
  96.     <<strong>Design:WpfDesignerControl
  97.         </strong>x:Name="designerControl"
  98.         Height="600"
  99.         Margin="10" />
  100. </StackPanel>    Width="60"
  101. <StackPanel
  102.     x:Name="reportPanel"
  103.     Grid.Row="2"
  104.     Grid.ColumnSpan="3"
  105.     Margin="10">
  106.     <<strong>Preview:WpfPreviewControl
  107.         </strong>x:Name="previewControl"
  108.         Height="600"
  109.         Margin="10"
  110.         ToolbarVisible="False" />
  111.     <<strong>Design:WpfDesignerControl
  112.         </strong>x:Name="designerControl"
  113.         Height="600"
  114.         Margin="10" />
  115. </StackPanel>    Margin="24,0,0,0"
  116. <StackPanel
  117.     x:Name="reportPanel"
  118.     Grid.Row="2"
  119.     Grid.ColumnSpan="3"
  120.     Margin="10">
  121.     <<strong>Preview:WpfPreviewControl
  122.         </strong>x:Name="previewControl"
  123.         Height="600"
  124.         Margin="10"
  125.         ToolbarVisible="False" />
  126.     <<strong>Design:WpfDesignerControl
  127.         </strong>x:Name="designerControl"
  128.         Height="600"
  129.         Margin="10" />
  130. </StackPanel>    Source="/Assets/dashboardItem1.png" />
  131. <StackPanel
  132.     x:Name="reportPanel"
  133.     Grid.Row="2"
  134.     Grid.ColumnSpan="3"
  135.     Margin="10">
  136.     <<strong>Preview:WpfPreviewControl
  137.         </strong>x:Name="previewControl"
  138.         Height="600"
  139.         Margin="10"
  140.         ToolbarVisible="False" />
  141.     <<strong>Design:WpfDesignerControl
  142.         </strong>x:Name="designerControl"
  143.         Height="600"
  144.         Margin="10" />
  145. </StackPanel><StackPanel
  146. <StackPanel
  147.     x:Name="reportPanel"
  148.     Grid.Row="2"
  149.     Grid.ColumnSpan="3"
  150.     Margin="10">
  151.     <<strong>Preview:WpfPreviewControl
  152.         </strong>x:Name="previewControl"
  153.         Height="600"
  154.         Margin="10"
  155.         ToolbarVisible="False" />
  156.     <<strong>Design:WpfDesignerControl
  157.         </strong>x:Name="designerControl"
  158.         Height="600"
  159.         Margin="10" />
  160. </StackPanel>    Grid.Column="1"
  161. <StackPanel
  162.     x:Name="reportPanel"
  163.     Grid.Row="2"
  164.     Grid.ColumnSpan="3"
  165.     Margin="10">
  166.     <<strong>Preview:WpfPreviewControl
  167.         </strong>x:Name="previewControl"
  168.         Height="600"
  169.         Margin="10"
  170.         ToolbarVisible="False" />
  171.     <<strong>Design:WpfDesignerControl
  172.         </strong>x:Name="designerControl"
  173.         Height="600"
  174.         Margin="10" />
  175. </StackPanel>    Margin="24"
  176. <StackPanel
  177.     x:Name="reportPanel"
  178.     Grid.Row="2"
  179.     Grid.ColumnSpan="3"
  180.     Margin="10">
  181.     <<strong>Preview:WpfPreviewControl
  182.         </strong>x:Name="previewControl"
  183.         Height="600"
  184.         Margin="10"
  185.         ToolbarVisible="False" />
  186.     <<strong>Design:WpfDesignerControl
  187.         </strong>x:Name="designerControl"
  188.         Height="600"
  189.         Margin="10" />
  190. </StackPanel>    VerticalAlignment="Center">
  191. <StackPanel
  192.     x:Name="reportPanel"
  193.     Grid.Row="2"
  194.     Grid.ColumnSpan="3"
  195.     Margin="10">
  196.     <<strong>Preview:WpfPreviewControl
  197.         </strong>x:Name="previewControl"
  198.         Height="600"
  199.         Margin="10"
  200.         ToolbarVisible="False" />
  201.     <<strong>Design:WpfDesignerControl
  202.         </strong>x:Name="designerControl"
  203.         Height="600"
  204.         Margin="10" />
  205. </StackPanel>    <ui:TextBlock
  206. <StackPanel
  207.     x:Name="reportPanel"
  208.     Grid.Row="2"
  209.     Grid.ColumnSpan="3"
  210.     Margin="10">
  211.     <<strong>Preview:WpfPreviewControl
  212.         </strong>x:Name="previewControl"
  213.         Height="600"
  214.         Margin="10"
  215.         ToolbarVisible="False" />
  216.     <<strong>Design:WpfDesignerControl
  217.         </strong>x:Name="designerControl"
  218.         Height="600"
  219.         Margin="10" />
  220. </StackPanel><StackPanel
  221.     x:Name="reportPanel"
  222.     Grid.Row="2"
  223.     Grid.ColumnSpan="3"
  224.     Margin="10">
  225.     <<strong>Preview:WpfPreviewControl
  226.         </strong>x:Name="previewControl"
  227.         Height="600"
  228.         Margin="10"
  229.         ToolbarVisible="False" />
  230.     <<strong>Design:WpfDesignerControl
  231.         </strong>x:Name="designerControl"
  232.         Height="600"
  233.         Margin="10" />
  234. </StackPanel>FontTypography="BodyStrong"
  235. <StackPanel
  236.     x:Name="reportPanel"
  237.     Grid.Row="2"
  238.     Grid.ColumnSpan="3"
  239.     Margin="10">
  240.     <<strong>Preview:WpfPreviewControl
  241.         </strong>x:Name="previewControl"
  242.         Height="600"
  243.         Margin="10"
  244.         ToolbarVisible="False" />
  245.     <<strong>Design:WpfDesignerControl
  246.         </strong>x:Name="designerControl"
  247.         Height="600"
  248.         Margin="10" />
  249. </StackPanel><StackPanel
  250.     x:Name="reportPanel"
  251.     Grid.Row="2"
  252.     Grid.ColumnSpan="3"
  253.     Margin="10">
  254.     <<strong>Preview:WpfPreviewControl
  255.         </strong>x:Name="previewControl"
  256.         Height="600"
  257.         Margin="10"
  258.         ToolbarVisible="False" />
  259.     <<strong>Design:WpfDesignerControl
  260.         </strong>x:Name="designerControl"
  261.         Height="600"
  262.         Margin="10" />
  263. </StackPanel>Text="报表打印预览"
  264. <StackPanel
  265.     x:Name="reportPanel"
  266.     Grid.Row="2"
  267.     Grid.ColumnSpan="3"
  268.     Margin="10">
  269.     <<strong>Preview:WpfPreviewControl
  270.         </strong>x:Name="previewControl"
  271.         Height="600"
  272.         Margin="10"
  273.         ToolbarVisible="False" />
  274.     <<strong>Design:WpfDesignerControl
  275.         </strong>x:Name="designerControl"
  276.         Height="600"
  277.         Margin="10" />
  278. </StackPanel><StackPanel
  279.     x:Name="reportPanel"
  280.     Grid.Row="2"
  281.     Grid.ColumnSpan="3"
  282.     Margin="10">
  283.     <<strong>Preview:WpfPreviewControl
  284.         </strong>x:Name="previewControl"
  285.         Height="600"
  286.         Margin="10"
  287.         ToolbarVisible="False" />
  288.     <<strong>Design:WpfDesignerControl
  289.         </strong>x:Name="designerControl"
  290.         Height="600"
  291.         Margin="10" />
  292. </StackPanel>TextWrapping="WrapWithOverflow" />
  293. <StackPanel
  294.     x:Name="reportPanel"
  295.     Grid.Row="2"
  296.     Grid.ColumnSpan="3"
  297.     Margin="10">
  298.     <<strong>Preview:WpfPreviewControl
  299.         </strong>x:Name="previewControl"
  300.         Height="600"
  301.         Margin="10"
  302.         ToolbarVisible="False" />
  303.     <<strong>Design:WpfDesignerControl
  304.         </strong>x:Name="designerControl"
  305.         Height="600"
  306.         Margin="10" />
  307. </StackPanel>    <ui:TextBlock
  308. <StackPanel
  309.     x:Name="reportPanel"
  310.     Grid.Row="2"
  311.     Grid.ColumnSpan="3"
  312.     Margin="10">
  313.     <<strong>Preview:WpfPreviewControl
  314.         </strong>x:Name="previewControl"
  315.         Height="600"
  316.         Margin="10"
  317.         ToolbarVisible="False" />
  318.     <<strong>Design:WpfDesignerControl
  319.         </strong>x:Name="designerControl"
  320.         Height="600"
  321.         Margin="10" />
  322. </StackPanel><StackPanel
  323.     x:Name="reportPanel"
  324.     Grid.Row="2"
  325.     Grid.ColumnSpan="3"
  326.     Margin="10">
  327.     <<strong>Preview:WpfPreviewControl
  328.         </strong>x:Name="previewControl"
  329.         Height="600"
  330.         Margin="10"
  331.         ToolbarVisible="False" />
  332.     <<strong>Design:WpfDesignerControl
  333.         </strong>x:Name="designerControl"
  334.         Height="600"
  335.         Margin="10" />
  336. </StackPanel>Appearance="Tertiary"
  337. <StackPanel
  338.     x:Name="reportPanel"
  339.     Grid.Row="2"
  340.     Grid.ColumnSpan="3"
  341.     Margin="10">
  342.     <<strong>Preview:WpfPreviewControl
  343.         </strong>x:Name="previewControl"
  344.         Height="600"
  345.         Margin="10"
  346.         ToolbarVisible="False" />
  347.     <<strong>Design:WpfDesignerControl
  348.         </strong>x:Name="designerControl"
  349.         Height="600"
  350.         Margin="10" />
  351. </StackPanel><StackPanel
  352.     x:Name="reportPanel"
  353.     Grid.Row="2"
  354.     Grid.ColumnSpan="3"
  355.     Margin="10">
  356.     <<strong>Preview:WpfPreviewControl
  357.         </strong>x:Name="previewControl"
  358.         Height="600"
  359.         Margin="10"
  360.         ToolbarVisible="False" />
  361.     <<strong>Design:WpfDesignerControl
  362.         </strong>x:Name="designerControl"
  363.         Height="600"
  364.         Margin="10" />
  365. </StackPanel>Text="NorthWind报表预览"
  366. <StackPanel
  367.     x:Name="reportPanel"
  368.     Grid.Row="2"
  369.     Grid.ColumnSpan="3"
  370.     Margin="10">
  371.     <<strong>Preview:WpfPreviewControl
  372.         </strong>x:Name="previewControl"
  373.         Height="600"
  374.         Margin="10"
  375.         ToolbarVisible="False" />
  376.     <<strong>Design:WpfDesignerControl
  377.         </strong>x:Name="designerControl"
  378.         Height="600"
  379.         Margin="10" />
  380. </StackPanel><StackPanel
  381.     x:Name="reportPanel"
  382.     Grid.Row="2"
  383.     Grid.ColumnSpan="3"
  384.     Margin="10">
  385.     <<strong>Preview:WpfPreviewControl
  386.         </strong>x:Name="previewControl"
  387.         Height="600"
  388.         Margin="10"
  389.         ToolbarVisible="False" />
  390.     <<strong>Design:WpfDesignerControl
  391.         </strong>x:Name="designerControl"
  392.         Height="600"
  393.         Margin="10" />
  394. </StackPanel>TextWrapping="WrapWithOverflow" />
  395. <StackPanel
  396.     x:Name="reportPanel"
  397.     Grid.Row="2"
  398.     Grid.ColumnSpan="3"
  399.     Margin="10">
  400.     <<strong>Preview:WpfPreviewControl
  401.         </strong>x:Name="previewControl"
  402.         Height="600"
  403.         Margin="10"
  404.         ToolbarVisible="False" />
  405.     <<strong>Design:WpfDesignerControl
  406.         </strong>x:Name="designerControl"
  407.         Height="600"
  408.         Margin="10" />
  409. </StackPanel></StackPanel>
  410.     </Grid>
  411. </ui:CardAction>
复制代码
Command的处理后端代码如下所示。
  1. /// <summary>
  2. /// 预览报表
  3. /// </summary>
  4. /// <param name="path">报表路径</param>
  5. [RelayCommand]
  6. private void PreviewReport(string path)
  7. {
  8.     var reportFile = Path.Combine(Environment.CurrentDirectory, $"Report/{path}");
  9.     if(File.Exists(reportFile))
  10.     {
  11. <StackPanel
  12.     x:Name="reportPanel"
  13.     Grid.Row="2"
  14.     Grid.ColumnSpan="3"
  15.     Margin="10">
  16.     <<strong>Preview:WpfPreviewControl
  17.         </strong>x:Name="previewControl"
  18.         Height="600"
  19.         Margin="10"
  20.         ToolbarVisible="False" />
  21.     <<strong>Design:WpfDesignerControl
  22.         </strong>x:Name="designerControl"
  23.         Height="600"
  24.         Margin="10" />
  25. </StackPanel>using (var report = new Report())
  26. <StackPanel
  27.     x:Name="reportPanel"
  28.     Grid.Row="2"
  29.     Grid.ColumnSpan="3"
  30.     Margin="10">
  31.     <<strong>Preview:WpfPreviewControl
  32.         </strong>x:Name="previewControl"
  33.         Height="600"
  34.         Margin="10"
  35.         ToolbarVisible="False" />
  36.     <<strong>Design:WpfDesignerControl
  37.         </strong>x:Name="designerControl"
  38.         Height="600"
  39.         Margin="10" />
  40. </StackPanel>{
  41. <StackPanel
  42.     x:Name="reportPanel"
  43.     Grid.Row="2"
  44.     Grid.ColumnSpan="3"
  45.     Margin="10">
  46.     <<strong>Preview:WpfPreviewControl
  47.         </strong>x:Name="previewControl"
  48.         Height="600"
  49.         Margin="10"
  50.         ToolbarVisible="False" />
  51.     <<strong>Design:WpfDesignerControl
  52.         </strong>x:Name="designerControl"
  53.         Height="600"
  54.         Margin="10" />
  55. </StackPanel>    //加载报表
  56. <StackPanel
  57.     x:Name="reportPanel"
  58.     Grid.Row="2"
  59.     Grid.ColumnSpan="3"
  60.     Margin="10">
  61.     <<strong>Preview:WpfPreviewControl
  62.         </strong>x:Name="previewControl"
  63.         Height="600"
  64.         Margin="10"
  65.         ToolbarVisible="False" />
  66.     <<strong>Design:WpfDesignerControl
  67.         </strong>x:Name="designerControl"
  68.         Height="600"
  69.         Margin="10" />
  70. </StackPanel>    report.Load(reportFile);
  71. <StackPanel
  72.     x:Name="reportPanel"
  73.     Grid.Row="2"
  74.     Grid.ColumnSpan="3"
  75.     Margin="10">
  76.     <<strong>Preview:WpfPreviewControl
  77.         </strong>x:Name="previewControl"
  78.         Height="600"
  79.         Margin="10"
  80.         ToolbarVisible="False" />
  81.     <<strong>Design:WpfDesignerControl
  82.         </strong>x:Name="designerControl"
  83.         Height="600"
  84.         Margin="10" />
  85. </StackPanel>    //创建数据源
  86. <StackPanel
  87.     x:Name="reportPanel"
  88.     Grid.Row="2"
  89.     Grid.ColumnSpan="3"
  90.     Margin="10">
  91.     <<strong>Preview:WpfPreviewControl
  92.         </strong>x:Name="previewControl"
  93.         Height="600"
  94.         Margin="10"
  95.         ToolbarVisible="False" />
  96.     <<strong>Design:WpfDesignerControl
  97.         </strong>x:Name="designerControl"
  98.         Height="600"
  99.         Margin="10" />
  100. </StackPanel>    var ds = GetNorthWindDataSet();
  101. <StackPanel
  102.     x:Name="reportPanel"
  103.     Grid.Row="2"
  104.     Grid.ColumnSpan="3"
  105.     Margin="10">
  106.     <<strong>Preview:WpfPreviewControl
  107.         </strong>x:Name="previewControl"
  108.         Height="600"
  109.         Margin="10"
  110.         ToolbarVisible="False" />
  111.     <<strong>Design:WpfDesignerControl
  112.         </strong>x:Name="designerControl"
  113.         Height="600"
  114.         Margin="10" />
  115. </StackPanel>    //绑定数据源
  116. <StackPanel
  117.     x:Name="reportPanel"
  118.     Grid.Row="2"
  119.     Grid.ColumnSpan="3"
  120.     Margin="10">
  121.     <<strong>Preview:WpfPreviewControl
  122.         </strong>x:Name="previewControl"
  123.         Height="600"
  124.         Margin="10"
  125.         ToolbarVisible="False" />
  126.     <<strong>Design:WpfDesignerControl
  127.         </strong>x:Name="designerControl"
  128.         Height="600"
  129.         Margin="10" />
  130. </StackPanel>    report.RegisterData(ds, "NorthWind");
  131. <StackPanel
  132.     x:Name="reportPanel"
  133.     Grid.Row="2"
  134.     Grid.ColumnSpan="3"
  135.     Margin="10">
  136.     <<strong>Preview:WpfPreviewControl
  137.         </strong>x:Name="previewControl"
  138.         Height="600"
  139.         Margin="10"
  140.         ToolbarVisible="False" />
  141.     <<strong>Design:WpfDesignerControl
  142.         </strong>x:Name="designerControl"
  143.         Height="600"
  144.         Margin="10" />
  145. </StackPanel>    //运行报表
  146. <StackPanel
  147.     x:Name="reportPanel"
  148.     Grid.Row="2"
  149.     Grid.ColumnSpan="3"
  150.     Margin="10">
  151.     <<strong>Preview:WpfPreviewControl
  152.         </strong>x:Name="previewControl"
  153.         Height="600"
  154.         Margin="10"
  155.         ToolbarVisible="False" />
  156.     <<strong>Design:WpfDesignerControl
  157.         </strong>x:Name="designerControl"
  158.         Height="600"
  159.         Margin="10" />
  160. </StackPanel>    report.ShowAsync();
  161. <StackPanel
  162.     x:Name="reportPanel"
  163.     Grid.Row="2"
  164.     Grid.ColumnSpan="3"
  165.     Margin="10">
  166.     <<strong>Preview:WpfPreviewControl
  167.         </strong>x:Name="previewControl"
  168.         Height="600"
  169.         Margin="10"
  170.         ToolbarVisible="False" />
  171.     <<strong>Design:WpfDesignerControl
  172.         </strong>x:Name="designerControl"
  173.         Height="600"
  174.         Margin="10" />
  175. </StackPanel>}
  176.     }
  177. }
复制代码
除了我们这里使用MVVM的处理定义,代码逻辑上和单击事件的处理差不多。
FastReport报表可以导出Excel、HTML、PDF等文档格式的文件,如下代码是导出PDF的处理代码,可以把报表导出和预览效果一样的PDF文件。
  1. /// <summary>
  2. /// 导出PDF
  3. /// </summary>
  4. /// <param name="path"></param>
  5. [RelayCommand]
  6. private void ReportExport(string path)
  7. {
  8.     var reportFile = Path.Combine(baseDir, $"Report/{path}");
  9.     if (File.Exists(reportFile))
  10.     {
  11. <StackPanel
  12.     x:Name="reportPanel"
  13.     Grid.Row="2"
  14.     Grid.ColumnSpan="3"
  15.     Margin="10">
  16.     <<strong>Preview:WpfPreviewControl
  17.         </strong>x:Name="previewControl"
  18.         Height="600"
  19.         Margin="10"
  20.         ToolbarVisible="False" />
  21.     <<strong>Design:WpfDesignerControl
  22.         </strong>x:Name="designerControl"
  23.         Height="600"
  24.         Margin="10" />
  25. </StackPanel>using (var report = new Report())
  26. <StackPanel
  27.     x:Name="reportPanel"
  28.     Grid.Row="2"
  29.     Grid.ColumnSpan="3"
  30.     Margin="10">
  31.     <<strong>Preview:WpfPreviewControl
  32.         </strong>x:Name="previewControl"
  33.         Height="600"
  34.         Margin="10"
  35.         ToolbarVisible="False" />
  36.     <<strong>Design:WpfDesignerControl
  37.         </strong>x:Name="designerControl"
  38.         Height="600"
  39.         Margin="10" />
  40. </StackPanel>{
  41. <StackPanel
  42.     x:Name="reportPanel"
  43.     Grid.Row="2"
  44.     Grid.ColumnSpan="3"
  45.     Margin="10">
  46.     <<strong>Preview:WpfPreviewControl
  47.         </strong>x:Name="previewControl"
  48.         Height="600"
  49.         Margin="10"
  50.         ToolbarVisible="False" />
  51.     <<strong>Design:WpfDesignerControl
  52.         </strong>x:Name="designerControl"
  53.         Height="600"
  54.         Margin="10" />
  55. </StackPanel>    //加载报表
  56. <StackPanel
  57.     x:Name="reportPanel"
  58.     Grid.Row="2"
  59.     Grid.ColumnSpan="3"
  60.     Margin="10">
  61.     <<strong>Preview:WpfPreviewControl
  62.         </strong>x:Name="previewControl"
  63.         Height="600"
  64.         Margin="10"
  65.         ToolbarVisible="False" />
  66.     <<strong>Design:WpfDesignerControl
  67.         </strong>x:Name="designerControl"
  68.         Height="600"
  69.         Margin="10" />
  70. </StackPanel>    report.Load(reportFile);
  71. <StackPanel
  72.     x:Name="reportPanel"
  73.     Grid.Row="2"
  74.     Grid.ColumnSpan="3"
  75.     Margin="10">
  76.     <<strong>Preview:WpfPreviewControl
  77.         </strong>x:Name="previewControl"
  78.         Height="600"
  79.         Margin="10"
  80.         ToolbarVisible="False" />
  81.     <<strong>Design:WpfDesignerControl
  82.         </strong>x:Name="designerControl"
  83.         Height="600"
  84.         Margin="10" />
  85. </StackPanel>    //创建数据源
  86. <StackPanel
  87.     x:Name="reportPanel"
  88.     Grid.Row="2"
  89.     Grid.ColumnSpan="3"
  90.     Margin="10">
  91.     <<strong>Preview:WpfPreviewControl
  92.         </strong>x:Name="previewControl"
  93.         Height="600"
  94.         Margin="10"
  95.         ToolbarVisible="False" />
  96.     <<strong>Design:WpfDesignerControl
  97.         </strong>x:Name="designerControl"
  98.         Height="600"
  99.         Margin="10" />
  100. </StackPanel>    var ds = GetNorthWindDataSet();
  101. <StackPanel
  102.     x:Name="reportPanel"
  103.     Grid.Row="2"
  104.     Grid.ColumnSpan="3"
  105.     Margin="10">
  106.     <<strong>Preview:WpfPreviewControl
  107.         </strong>x:Name="previewControl"
  108.         Height="600"
  109.         Margin="10"
  110.         ToolbarVisible="False" />
  111.     <<strong>Design:WpfDesignerControl
  112.         </strong>x:Name="designerControl"
  113.         Height="600"
  114.         Margin="10" />
  115. </StackPanel>    //绑定数据源
  116. <StackPanel
  117.     x:Name="reportPanel"
  118.     Grid.Row="2"
  119.     Grid.ColumnSpan="3"
  120.     Margin="10">
  121.     <<strong>Preview:WpfPreviewControl
  122.         </strong>x:Name="previewControl"
  123.         Height="600"
  124.         Margin="10"
  125.         ToolbarVisible="False" />
  126.     <<strong>Design:WpfDesignerControl
  127.         </strong>x:Name="designerControl"
  128.         Height="600"
  129.         Margin="10" />
  130. </StackPanel>    report.RegisterData(ds, "NorthWind");
  131. <StackPanel
  132.     x:Name="reportPanel"
  133.     Grid.Row="2"
  134.     Grid.ColumnSpan="3"
  135.     Margin="10">
  136.     <<strong>Preview:WpfPreviewControl
  137.         </strong>x:Name="previewControl"
  138.         Height="600"
  139.         Margin="10"
  140.         ToolbarVisible="False" />
  141.     <<strong>Design:WpfDesignerControl
  142.         </strong>x:Name="designerControl"
  143.         Height="600"
  144.         Margin="10" />
  145. </StackPanel>    //运行报表
  146. <StackPanel
  147.     x:Name="reportPanel"
  148.     Grid.Row="2"
  149.     Grid.ColumnSpan="3"
  150.     Margin="10">
  151.     <<strong>Preview:WpfPreviewControl
  152.         </strong>x:Name="previewControl"
  153.         Height="600"
  154.         Margin="10"
  155.         ToolbarVisible="False" />
  156.     <<strong>Design:WpfDesignerControl
  157.         </strong>x:Name="designerControl"
  158.         Height="600"
  159.         Margin="10" />
  160. </StackPanel>    report.Prepare();
  161. <StackPanel
  162.     x:Name="reportPanel"
  163.     Grid.Row="2"
  164.     Grid.ColumnSpan="3"
  165.     Margin="10">
  166.     <<strong>Preview:WpfPreviewControl
  167.         </strong>x:Name="previewControl"
  168.         Height="600"
  169.         Margin="10"
  170.         ToolbarVisible="False" />
  171.     <<strong>Design:WpfDesignerControl
  172.         </strong>x:Name="designerControl"
  173.         Height="600"
  174.         Margin="10" />
  175. </StackPanel>    //导出PDF报表
  176. <StackPanel
  177.     x:Name="reportPanel"
  178.     Grid.Row="2"
  179.     Grid.ColumnSpan="3"
  180.     Margin="10">
  181.     <<strong>Preview:WpfPreviewControl
  182.         </strong>x:Name="previewControl"
  183.         Height="600"
  184.         Margin="10"
  185.         ToolbarVisible="False" />
  186.     <<strong>Design:WpfDesignerControl
  187.         </strong>x:Name="designerControl"
  188.         Height="600"
  189.         Margin="10" />
  190. </StackPanel>    var file = FileDialogHelper.SavePdf("result.pdf");
  191. <StackPanel
  192.     x:Name="reportPanel"
  193.     Grid.Row="2"
  194.     Grid.ColumnSpan="3"
  195.     Margin="10">
  196.     <<strong>Preview:WpfPreviewControl
  197.         </strong>x:Name="previewControl"
  198.         Height="600"
  199.         Margin="10"
  200.         ToolbarVisible="False" />
  201.     <<strong>Design:WpfDesignerControl
  202.         </strong>x:Name="designerControl"
  203.         Height="600"
  204.         Margin="10" />
  205. </StackPanel>    if (!string.IsNullOrEmpty(file))
  206. <StackPanel
  207.     x:Name="reportPanel"
  208.     Grid.Row="2"
  209.     Grid.ColumnSpan="3"
  210.     Margin="10">
  211.     <<strong>Preview:WpfPreviewControl
  212.         </strong>x:Name="previewControl"
  213.         Height="600"
  214.         Margin="10"
  215.         ToolbarVisible="False" />
  216.     <<strong>Design:WpfDesignerControl
  217.         </strong>x:Name="designerControl"
  218.         Height="600"
  219.         Margin="10" />
  220. </StackPanel>    {
  221. <StackPanel
  222.     x:Name="reportPanel"
  223.     Grid.Row="2"
  224.     Grid.ColumnSpan="3"
  225.     Margin="10">
  226.     <<strong>Preview:WpfPreviewControl
  227.         </strong>x:Name="previewControl"
  228.         Height="600"
  229.         Margin="10"
  230.         ToolbarVisible="False" />
  231.     <<strong>Design:WpfDesignerControl
  232.         </strong>x:Name="designerControl"
  233.         Height="600"
  234.         Margin="10" />
  235. </StackPanel><StackPanel
  236.     x:Name="reportPanel"
  237.     Grid.Row="2"
  238.     Grid.ColumnSpan="3"
  239.     Margin="10">
  240.     <<strong>Preview:WpfPreviewControl
  241.         </strong>x:Name="previewControl"
  242.         Height="600"
  243.         Margin="10"
  244.         ToolbarVisible="False" />
  245.     <<strong>Design:WpfDesignerControl
  246.         </strong>x:Name="designerControl"
  247.         Height="600"
  248.         Margin="10" />
  249. </StackPanel>var export = new<strong> PDFExport</strong>();
  250. <StackPanel
  251.     x:Name="reportPanel"
  252.     Grid.Row="2"
  253.     Grid.ColumnSpan="3"
  254.     Margin="10">
  255.     <<strong>Preview:WpfPreviewControl
  256.         </strong>x:Name="previewControl"
  257.         Height="600"
  258.         Margin="10"
  259.         ToolbarVisible="False" />
  260.     <<strong>Design:WpfDesignerControl
  261.         </strong>x:Name="designerControl"
  262.         Height="600"
  263.         Margin="10" />
  264. </StackPanel><StackPanel
  265.     x:Name="reportPanel"
  266.     Grid.Row="2"
  267.     Grid.ColumnSpan="3"
  268.     Margin="10">
  269.     <<strong>Preview:WpfPreviewControl
  270.         </strong>x:Name="previewControl"
  271.         Height="600"
  272.         Margin="10"
  273.         ToolbarVisible="False" />
  274.     <<strong>Design:WpfDesignerControl
  275.         </strong>x:Name="designerControl"
  276.         Height="600"
  277.         Margin="10" />
  278. </StackPanel><strong>report.Export</strong>(export, file);
  279. <StackPanel
  280.     x:Name="reportPanel"
  281.     Grid.Row="2"
  282.     Grid.ColumnSpan="3"
  283.     Margin="10">
  284.     <<strong>Preview:WpfPreviewControl
  285.         </strong>x:Name="previewControl"
  286.         Height="600"
  287.         Margin="10"
  288.         ToolbarVisible="False" />
  289.     <<strong>Design:WpfDesignerControl
  290.         </strong>x:Name="designerControl"
  291.         Height="600"
  292.         Margin="10" />
  293. </StackPanel>    }
  294. <StackPanel
  295.     x:Name="reportPanel"
  296.     Grid.Row="2"
  297.     Grid.ColumnSpan="3"
  298.     Margin="10">
  299.     <<strong>Preview:WpfPreviewControl
  300.         </strong>x:Name="previewControl"
  301.         Height="600"
  302.         Margin="10"
  303.         ToolbarVisible="False" />
  304.     <<strong>Design:WpfDesignerControl
  305.         </strong>x:Name="designerControl"
  306.         Height="600"
  307.         Margin="10" />
  308. </StackPanel>    //打开PDF
  309. <StackPanel
  310.     x:Name="reportPanel"
  311.     Grid.Row="2"
  312.     Grid.ColumnSpan="3"
  313.     Margin="10">
  314.     <<strong>Preview:WpfPreviewControl
  315.         </strong>x:Name="previewControl"
  316.         Height="600"
  317.         Margin="10"
  318.         ToolbarVisible="False" />
  319.     <<strong>Design:WpfDesignerControl
  320.         </strong>x:Name="designerControl"
  321.         Height="600"
  322.         Margin="10" />
  323. </StackPanel>    if (File.Exists(file))
  324. <StackPanel
  325.     x:Name="reportPanel"
  326.     Grid.Row="2"
  327.     Grid.ColumnSpan="3"
  328.     Margin="10">
  329.     <<strong>Preview:WpfPreviewControl
  330.         </strong>x:Name="previewControl"
  331.         Height="600"
  332.         Margin="10"
  333.         ToolbarVisible="False" />
  334.     <<strong>Design:WpfDesignerControl
  335.         </strong>x:Name="designerControl"
  336.         Height="600"
  337.         Margin="10" />
  338. </StackPanel>    {
  339. <StackPanel
  340.     x:Name="reportPanel"
  341.     Grid.Row="2"
  342.     Grid.ColumnSpan="3"
  343.     Margin="10">
  344.     <<strong>Preview:WpfPreviewControl
  345.         </strong>x:Name="previewControl"
  346.         Height="600"
  347.         Margin="10"
  348.         ToolbarVisible="False" />
  349.     <<strong>Design:WpfDesignerControl
  350.         </strong>x:Name="designerControl"
  351.         Height="600"
  352.         Margin="10" />
  353. </StackPanel><StackPanel
  354.     x:Name="reportPanel"
  355.     Grid.Row="2"
  356.     Grid.ColumnSpan="3"
  357.     Margin="10">
  358.     <<strong>Preview:WpfPreviewControl
  359.         </strong>x:Name="previewControl"
  360.         Height="600"
  361.         Margin="10"
  362.         ToolbarVisible="False" />
  363.     <<strong>Design:WpfDesignerControl
  364.         </strong>x:Name="designerControl"
  365.         Height="600"
  366.         Margin="10" />
  367. </StackPanel>Process.Start("explorer.exe", file);
  368. <StackPanel
  369.     x:Name="reportPanel"
  370.     Grid.Row="2"
  371.     Grid.ColumnSpan="3"
  372.     Margin="10">
  373.     <<strong>Preview:WpfPreviewControl
  374.         </strong>x:Name="previewControl"
  375.         Height="600"
  376.         Margin="10"
  377.         ToolbarVisible="False" />
  378.     <<strong>Design:WpfDesignerControl
  379.         </strong>x:Name="designerControl"
  380.         Height="600"
  381.         Margin="10" />
  382. </StackPanel>    }
  383. <StackPanel
  384.     x:Name="reportPanel"
  385.     Grid.Row="2"
  386.     Grid.ColumnSpan="3"
  387.     Margin="10">
  388.     <<strong>Preview:WpfPreviewControl
  389.         </strong>x:Name="previewControl"
  390.         Height="600"
  391.         Margin="10"
  392.         ToolbarVisible="False" />
  393.     <<strong>Design:WpfDesignerControl
  394.         </strong>x:Name="designerControl"
  395.         Height="600"
  396.         Margin="10" />
  397. </StackPanel>}
  398.     }
  399. }
复制代码
导出文件后,我们在WPF程序中,可以通过 Process.Start("explorer.exe", file); 命令进行打开PDF文档。

这种通过FastReport内置类的Design或者Show方法展示的报表,是一个独立的窗口打开的。
有时候为了方便,我们可能需要设计一个页面或者窗口来放置我们的设计或者预览报表,那么我们可以通过在页面中展示对应组件(预览组件、设计组件)来承载报表信息。
需要在页面中添加对应的命名空间,如下代码所示。
  1. [/code]在页面中可以放置对应的组件对象,如下代码所示。
  2. [code]<StackPanel
  3.     x:Name="reportPanel"
  4.     Grid.Row="2"
  5.     Grid.ColumnSpan="3"
  6.     Margin="10">
  7.     <<strong>Preview:WpfPreviewControl
  8.         </strong>x:Name="previewControl"
  9.         Height="600"
  10.         Margin="10"
  11.         ToolbarVisible="False" />
  12.     <<strong>Design:WpfDesignerControl
  13.         </strong>x:Name="designerControl"
  14.         Height="600"
  15.         Margin="10" />
  16. </StackPanel>
复制代码
展示报表的时候,后台代码处理如下所示。
  1. private void btnShowReport_Click(object sender, RoutedEventArgs e){    var reportFile = Path.Combine(baseDir, "Report/report.frx");    var report = new Report();<StackPanel
  2.     x:Name="reportPanel"
  3.     Grid.Row="2"
  4.     Grid.ColumnSpan="3"
  5.     Margin="10">
  6.     <<strong>Preview:WpfPreviewControl
  7.         </strong>x:Name="previewControl"
  8.         Height="600"
  9.         Margin="10"
  10.         ToolbarVisible="False" />
  11.     <<strong>Design:WpfDesignerControl
  12.         </strong>x:Name="designerControl"
  13.         Height="600"
  14.         Margin="10" />
  15. </StackPanel>//加载报表<StackPanel
  16.     x:Name="reportPanel"
  17.     Grid.Row="2"
  18.     Grid.ColumnSpan="3"
  19.     Margin="10">
  20.     <<strong>Preview:WpfPreviewControl
  21.         </strong>x:Name="previewControl"
  22.         Height="600"
  23.         Margin="10"
  24.         ToolbarVisible="False" />
  25.     <<strong>Design:WpfDesignerControl
  26.         </strong>x:Name="designerControl"
  27.         Height="600"
  28.         Margin="10" />
  29. </StackPanel>report.Load(reportFile);    //创建数据源    var list = CreateBusinessObject();    //绑定数据源    report.RegisterData(list, "Categories");    [b]report.PrepareAsync(previewControl)[/b]; //运行报表}private void btnShowDesign_Click(object sender, RoutedEventArgs e){    var reportFile = Path.Combine(baseDir, "Report/report.frx");    var report = new Report();    //加载报表    report.Load(reportFile);    //创建数据源    var list = CreateBusinessObject();    //绑定数据源    report.RegisterData(list, "Categories");    [b]designerControl.Report [/b][b]=[/b][b] report[/b];}<StackPanel
  30.     x:Name="reportPanel"
  31.     Grid.Row="2"
  32.     Grid.ColumnSpan="3"
  33.     Margin="10">
  34.     <<strong>Preview:WpfPreviewControl
  35.         </strong>x:Name="previewControl"
  36.         Height="600"
  37.         Margin="10"
  38.         ToolbarVisible="False" />
  39.     <<strong>Design:WpfDesignerControl
  40.         </strong>x:Name="designerControl"
  41.         Height="600"
  42.         Margin="10" />
  43. </StackPanel>
复制代码

当然我们也可以单独设计一个页面来承载,如下页面所示。

通过页面的封装,我们在页面中提供一个公用的报表组件。
  1. /// /// FastReportPreview.xaml 的交互逻辑/// public partial class FastReportPreview : Window{    ///     /// 报表对象    ///     public Report Report { get; set; } = new();//初始化对象    public FastReportPreview()    {<StackPanel
  2.     x:Name="reportPanel"
  3.     Grid.Row="2"
  4.     Grid.ColumnSpan="3"
  5.     Margin="10">
  6.     <<strong>Preview:WpfPreviewControl
  7.         </strong>x:Name="previewControl"
  8.         Height="600"
  9.         Margin="10"
  10.         ToolbarVisible="False" />
  11.     <<strong>Design:WpfDesignerControl
  12.         </strong>x:Name="designerControl"
  13.         Height="600"
  14.         Margin="10" />
  15. </StackPanel>InitializeComponent();<StackPanel
  16.     x:Name="reportPanel"
  17.     Grid.Row="2"
  18.     Grid.ColumnSpan="3"
  19.     Margin="10">
  20.     <<strong>Preview:WpfPreviewControl
  21.         </strong>x:Name="previewControl"
  22.         Height="600"
  23.         Margin="10"
  24.         ToolbarVisible="False" />
  25.     <<strong>Design:WpfDesignerControl
  26.         </strong>x:Name="designerControl"
  27.         Height="600"
  28.         Margin="10" />
  29. </StackPanel>[b]this.previewControl.Loaded += (s, e) =>[/b][b]<StackPanel
  30.     x:Name="reportPanel"
  31.     Grid.Row="2"
  32.     Grid.ColumnSpan="3"
  33.     Margin="10">
  34.     <<strong>Preview:WpfPreviewControl
  35.         </strong>x:Name="previewControl"
  36.         Height="600"
  37.         Margin="10"
  38.         ToolbarVisible="False" />
  39.     <<strong>Design:WpfDesignerControl
  40.         </strong>x:Name="designerControl"
  41.         Height="600"
  42.         Margin="10" />
  43. </StackPanel>{<StackPanel
  44.     x:Name="reportPanel"
  45.     Grid.Row="2"
  46.     Grid.ColumnSpan="3"
  47.     Margin="10">
  48.     <<strong>Preview:WpfPreviewControl
  49.         </strong>x:Name="previewControl"
  50.         Height="600"
  51.         Margin="10"
  52.         ToolbarVisible="False" />
  53.     <<strong>Design:WpfDesignerControl
  54.         </strong>x:Name="designerControl"
  55.         Height="600"
  56.         Margin="10" />
  57. </StackPanel>    Report.PrepareAsync(previewControl);<StackPanel
  58.     x:Name="reportPanel"
  59.     Grid.Row="2"
  60.     Grid.ColumnSpan="3"
  61.     Margin="10">
  62.     <<strong>Preview:WpfPreviewControl
  63.         </strong>x:Name="previewControl"
  64.         Height="600"
  65.         Margin="10"
  66.         ToolbarVisible="False" />
  67.     <<strong>Design:WpfDesignerControl
  68.         </strong>x:Name="designerControl"
  69.         Height="600"
  70.         Margin="10" />
  71. </StackPanel> };[/b]    }}
复制代码
在调用报表页面展示的时候,对报表对象做相应的处理即可,然后调用窗口进行展示。
  1. /// /// 使用自定义窗口打开报表预览/// private void btnShowReport2_Click(object sender, RoutedEventArgs e){    var dlg = App.GetService();    if (dlg != null)    {<StackPanel
  2.     x:Name="reportPanel"
  3.     Grid.Row="2"
  4.     Grid.ColumnSpan="3"
  5.     Margin="10">
  6.     <<strong>Preview:WpfPreviewControl
  7.         </strong>x:Name="previewControl"
  8.         Height="600"
  9.         Margin="10"
  10.         ToolbarVisible="False" />
  11.     <<strong>Design:WpfDesignerControl
  12.         </strong>x:Name="designerControl"
  13.         Height="600"
  14.         Margin="10" />
  15. </StackPanel>var reportFile = Path.Combine(baseDir, "Report/report.frx");<StackPanel
  16.     x:Name="reportPanel"
  17.     Grid.Row="2"
  18.     Grid.ColumnSpan="3"
  19.     Margin="10">
  20.     <<strong>Preview:WpfPreviewControl
  21.         </strong>x:Name="previewControl"
  22.         Height="600"
  23.         Margin="10"
  24.         ToolbarVisible="False" />
  25.     <<strong>Design:WpfDesignerControl
  26.         </strong>x:Name="designerControl"
  27.         Height="600"
  28.         Margin="10" />
  29. </StackPanel>//加载报表<StackPanel
  30.     x:Name="reportPanel"
  31.     Grid.Row="2"
  32.     Grid.ColumnSpan="3"
  33.     Margin="10">
  34.     <<strong>Preview:WpfPreviewControl
  35.         </strong>x:Name="previewControl"
  36.         Height="600"
  37.         Margin="10"
  38.         ToolbarVisible="False" />
  39.     <<strong>Design:WpfDesignerControl
  40.         </strong>x:Name="designerControl"
  41.         Height="600"
  42.         Margin="10" />
  43. </StackPanel>dlg.Report.Load(reportFile);<StackPanel
  44.     x:Name="reportPanel"
  45.     Grid.Row="2"
  46.     Grid.ColumnSpan="3"
  47.     Margin="10">
  48.     <<strong>Preview:WpfPreviewControl
  49.         </strong>x:Name="previewControl"
  50.         Height="600"
  51.         Margin="10"
  52.         ToolbarVisible="False" />
  53.     <<strong>Design:WpfDesignerControl
  54.         </strong>x:Name="designerControl"
  55.         Height="600"
  56.         Margin="10" />
  57. </StackPanel>//创建数据源<StackPanel
  58.     x:Name="reportPanel"
  59.     Grid.Row="2"
  60.     Grid.ColumnSpan="3"
  61.     Margin="10">
  62.     <<strong>Preview:WpfPreviewControl
  63.         </strong>x:Name="previewControl"
  64.         Height="600"
  65.         Margin="10"
  66.         ToolbarVisible="False" />
  67.     <<strong>Design:WpfDesignerControl
  68.         </strong>x:Name="designerControl"
  69.         Height="600"
  70.         Margin="10" />
  71. </StackPanel>var list = CreateBusinessObject();<StackPanel
  72.     x:Name="reportPanel"
  73.     Grid.Row="2"
  74.     Grid.ColumnSpan="3"
  75.     Margin="10">
  76.     <<strong>Preview:WpfPreviewControl
  77.         </strong>x:Name="previewControl"
  78.         Height="600"
  79.         Margin="10"
  80.         ToolbarVisible="False" />
  81.     <<strong>Design:WpfDesignerControl
  82.         </strong>x:Name="designerControl"
  83.         Height="600"
  84.         Margin="10" />
  85. </StackPanel>//绑定数据源<StackPanel
  86.     x:Name="reportPanel"
  87.     Grid.Row="2"
  88.     Grid.ColumnSpan="3"
  89.     Margin="10">
  90.     <<strong>Preview:WpfPreviewControl
  91.         </strong>x:Name="previewControl"
  92.         Height="600"
  93.         Margin="10"
  94.         ToolbarVisible="False" />
  95.     <<strong>Design:WpfDesignerControl
  96.         </strong>x:Name="designerControl"
  97.         Height="600"
  98.         Margin="10" />
  99. </StackPanel>dlg.Report.RegisterData(list, "Categories");<StackPanel
  100.     x:Name="reportPanel"
  101.     Grid.Row="2"
  102.     Grid.ColumnSpan="3"
  103.     Margin="10">
  104.     <<strong>Preview:WpfPreviewControl
  105.         </strong>x:Name="previewControl"
  106.         Height="600"
  107.         Margin="10"
  108.         ToolbarVisible="False" />
  109.     <<strong>Design:WpfDesignerControl
  110.         </strong>x:Name="designerControl"
  111.         Height="600"
  112.         Margin="10" />
  113. </StackPanel>dlg.ShowDialog();    }}
复制代码
同理设计报表也是一样的处理方式,不在赘述。
以上就是我WPF应用中使用FastReport.WPF报表模块的一些经验总结,结合之前的Winform案例经验,我们可以充分的利用FastReport的报表的相关功能,实现我们所需要的报表展示或者文件导出了。
 

来源:https://www.cnblogs.com/wuhuacong/p/17969163
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具