zoukankan      html  css  js  c++  java
  • C#

    简单报表我们可以通过label、textBox和PrintDialog来实现,但是一般在实际生产过程中,用户的报表需求一般都是比较复杂的。

    本篇主要记录对于传统中国式复杂报表的处理方法和解决思路,为后续的学习、开发做下笔记,不足之处请指正。

    ReportViewer控件包安装 

    新建一个Winfrm应用程序,右键解决方案,选中NuGet包管理器,搜索Report.Viewer、SqlServer和ReportingServices,完成控件包的安装。

    安装完成后,可以在左侧工具箱中看到ReportViewer控件。

    Rdlc Report安装

    单击菜单 “扩展”-“管理扩展”,搜索关键字Rdlc Report,完成下载,关闭所有VS项目后,系统自动安装(大约需要10分钟,耐心等待)。

    安装初始化

    单击“Modify”开始安装

    耐心等待完成安装。

    添加数据集

    右键项目,选择“添加”-“新建项”,选择“数据集”。

    添加必要的数据集字段,用于后续报表中需要显示的内容。

    添加报表rdlc

    右键项目,选择“添加”-“新建项”,选择“Visual C#项”,选择时需要注意,这里的报表是繁体字(只有rdlc模块安装成功才可以选到报表)。

    此时,我们可以在如下界面进行报表模板的相关设置了。

    空白处单击右键,选择“插入”-“矩阵”,选择我们刚刚建立的数据源。

    然后根据需要调整模板,插入行或者列,合并(插入列后即可实现合并单元格)或者拆分单元格。

    WinFrm前台设定

    核心代码

    1 private void btnPrint_Click(object sender, EventArgs e)
     2         {
     3             // Jeremy 2019.11.26
     4             // 构造新的DataTable,字段名称和DataTableMain中的一致
     5             DataTable dt = new DataTable();
     6             dt.Columns.Add("dtReportName");
     7             dt.Columns.Add("dtName");
     8             dt.Columns.Add("dtAge");
     9             dt.Columns.Add("dtBirthday");
    10             dt.Columns.Add("dtWorkNO");
    11             dt.Columns.Add("dtInTime");
    12             dt.Columns.Add("dtCall");
    13             dt.Columns.Add("dtJob");
    14             dt.Columns.Add("dtDegree");
    15             dt.Columns.Add("dtRemark");
    16             // 动态添加前台传来的数据
    17             dt.Rows.Add(new object[] { this.txtReportName.Text, this.txtName.Text, this.txtAge.Text, this.dtpBirthday.Value.ToString(), this.txtWorkNO.Text, this.dtpInTime.Value.ToString(),
    18                         this.txtCall.Text, this.txtJob.Text, this.txtDegree.Text, this.txtRemark.Text});
    19             // 名称需要用我们之前设定的 "ReportMain.rdlc" 
    20             // 另外需要将ReportMain.rdlc文件复制到当前可执行程序目录下
    21             this.reportViewerMain.LocalReport.ReportPath = "ReportMain.rdlc";
    22             this.reportViewerMain.LocalReport.DataSources.Clear();
    23             // 名称需要用我们之前设定的 "DataSetReport"
    24             this.reportViewerMain.LocalReport.DataSources.Add(new ReportDataSource("DataSetReport", dt));
    25             this.reportViewerMain.RefreshReport();
    26         }

    效果展示

  • 相关阅读:
    驱动02.按键
    驱动01.LED
    更换编译器(转载)
    2.使用线程方式获取标准输入
    1.使用非阻塞方式获取标准输入
    编写一个通用的Makefile文件
    layui 中 表单 会自动刷新的问题
    layui 中弹窗的时候关闭当前页面并刷新
    ssm框架中解决 sqlserver数据库的分页问题(用的是mybatis插件)
    关于 @SuppressWarnings 的注解
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312515.html
Copyright © 2011-2022 走看看