zoukankan      html  css  js  c++  java
  • 利用General框架开发RDLC报表

    RDLC是微软推出的自家的报表软件,虽然没有一些第三方的报表软件强大好用,但是作为VisualStudio集成的报表工具,在客户要求不高的情况下还是非常值得一用的,本文将介绍通过General代码生成器和General框架快速的开发一个报表程序。

    第一步、生成RDLC报表文件

    传统的开发方式是通过VisualStudio创建RDLC报表文件,但这种方式效率很慢,不适合大量报表开发,而通过General代码生成器可以快速的大量生成报表格式,大大提高开发效率,并且生成的报表文件可以在VisualStudio中打开继续修改,并不影响复杂报表格式的制作。用General代码生成器生成RDLC报表文件的过程如下图所示:

     

    生成之后保存为后缀名为.rdlc的报表文件。

    第二步、制作报表查看器

    如果是WinForm程序,这一步非常简单,只需要新建一个窗体,再从工具箱中将ReportViewer控件拖到窗体上并设置Dock = Fill就可以了。如果工具箱中没有找到ReportViewer,需要手动添加,还有可能工具箱里没有ReportViewer,但手动添加时ReportViewer项已经勾选了,那就需要取消勾选,然后再打开再勾选添加。

    RDLC可以通过添加数据集的方式给报表输送数据,但这种方式灵活性太差不适合项目要求。这里,我们采用动态方式给报表输送数据,并做成通用的报表查看器,这样再增加报表时,只需生成新的RDLC文件并指定给报表查看器,再输送指定的数据即可。

    所以我们修改报表查看器的后台代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Text;
     7 using System.Windows.Forms;
     8  
     9 namespace Sample.Market.WinForm
    10 {
    11     public partial class FrmReport : Form
    12     {
    13         /// <summary>
    14         /// RDLC文件路径,支持相对路径
    15         /// </summary>
    16         public string ReportPath { getset; }
    17  
    18         /// <summary>
    19         /// 报表数据源
    20         /// </summary>
    21         public DataTable DataSource { getset; }
    22  
    23         public FrmReport()
    24         {
    25             InitializeComponent();
    26         }
    27  
    28         private void FrmReport_Load(object sender, EventArgs e)
    29         {
    30             // 显示报表代码
    31             reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
    32             reportViewer1.LocalReport.ReportPath = this.ReportPath;
    33             reportViewer1.LocalReport.DataSources.Clear();
    34             reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1"this.DataSource));
    35             reportViewer1.RefreshReport();
    36         }
    37     }
    38 }


    而调用报表查看器打开报表的代码如下:

    1             DataTable dt = goodsLogic.GetAllData();
    2             FrmReport frm = new FrmReport();
    3             frm.ReportPath = "Reports\GoodsReport.rdlc";
    4             frm.DataSource = dt;
    5             frm.Show();

    GoodsLogicGetAllData方法代码如下:

     1         /// <summary>

    2         /// 获取所有数据
    3         /// </summary>
    4         /// <returns></returns>
    5         public DataTable GetAllData()
    6         {
    7             return DataManager.Default.CreateQuery<Goods>().ToTable();
    8         }

    可以看到,通过General框架很方便的取到报表数据,再调用报表查看器显示报表,代码非常简单,最终显示结果如下:

     

    如果需要修改报表的格式,比如列宽、标题等,可以将.rdlc文件在VisualStudio中打开进行编辑,或是在代码生成器中修改模板重新生成报表文件。

    大家可能还注意到一个问题,就是报表的列头在下一页不见了,要让列头在每页都显示需要对报表文件进行如下修改:

     

     你可能会觉得每一个报表都这样修改太麻烦,那好,我们来修改模板。

    先使用文本比较工具比较一下修改前和修改后的.rdlc文件,发现差别只有一行:

     

    那我们相应的在模板中也加入这一行:

    重新生成报表文件,再打开报表,可以看到每页都可以显示列头了。 

    General代码生成器请移步这里下载:

     General框架及代码生成器下载地址

  • 相关阅读:
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    分布式架构2:Nginx下Session存储
    分布式架构3:MySQL集群(Mysql Cluster7.5.5)
    分布式架构1:Nginx实现负载均衡
    Oracle 触发器记录
    [Deprecation Notice] 本博客弃用, 迁移至新博客
    KM算法 O(n^3)最大权完美匹配
    Python 学习笔记(附 Pytorch)
    你一定看的懂的:vlan与交换机端口的三种模式access,trunk和hybrid
    Git代码回滚
  • 原文地址:https://www.cnblogs.com/lgyup/p/4618025.html
Copyright © 2011-2022 走看看