• 水晶报表CrystalReports很强大也很简单!


      水晶报表很强大啊!

      去年就搞过,但是由于当时知道的东西太少,对于数据绑定的机制理解的太浅,最后也没弄出个所以然。最近看到别人做的成果之后才坚定这个信念,CrystalReports可以实现很复杂的报表!煤矿行业的报表很复杂不是吗,用CrystalReports来解决吧!这里练习了一下CrystalReports的使用。

      看看煤矿储量管理的一张报表,啊,真的很复杂啊!

    图1

      仔细分析,其中有一部分(红色框表示)是可以作为一张子表显示的。模拟这个子表,首先定义一个类Res,很简单,就几个属性字段。

    View Code
     1 namespace 水晶报表练习
    2 {
    3 class Res
    4 {
    5 double x;
    6
    7 public double X
    8 {
    9 get { return x; }
    10 set { x = value; }
    11 }
    12 double y;
    13
    14 public double Y
    15 {
    16 get { return y; }
    17 set { y = value; }
    18 }
    19 double x1;
    20
    21 public double X1
    22 {
    23 get { return x1; }
    24 set { x1 = value; }
    25 }
    26 double y1;
    27
    28 public double Y1
    29 {
    30 get { return y1; }
    31 set { y1 = value; }
    32 }
    33 double x2;
    34
    35 public double X2
    36 {
    37 get { return x2; }
    38 set { x2 = value; }
    39 }
    40 double y2;
    41
    42 public double Y2
    43 {
    44 get { return y2; }
    45 set { y2 = value; }
    46 }
    47 }

    From窗体From的代码如下:

    View Code
     1 using System;
    2 using System.Collections.Generic;
    3 using System.ComponentModel;
    4 using System.Data;
    5 using System.Drawing;
    6 using System.Linq;
    7 using System.Text;
    8 using System.Windows.Forms;
    9 using System.Collections;
    10 using CrystalDecisions.CrystalReports.Engine;
    11
    12 namespace 水晶报表练习
    13 {
    14 public partial class Form1 : Form
    15 {
    16 public Form1()
    17 {
    18 InitializeComponent();
    19 }
    20 private ArrayList stockValues;
    21 private ReportDocument stockObjectsReport;
    22 private void Form1_Load(object sender, EventArgs e)
    23 {
    24 stockValues=new ArrayList();
    25 //string reportPath =Application.StartupPath+"\\CrystalReport1.rpt";
    26 //string reportPath = @"..\..\CrystalReport2.rpt";
    27
    28 stockObjectsReport = new ReportDocument();
    29 // stockObjectsReport.Load(reportPath);
    30
    31 for (int i = 1; i < 5; i++)
    32 {
    33 Res m_Res = new Res();
    34 m_Res.X = 100*i;
    35 m_Res.Y = 2;
    36 m_Res.X1 = 10;
    37 m_Res.X2 = 12;
    38 m_Res.Y1 = 4;
    39 m_Res.Y = 5;
    40 stockValues.Add(m_Res);
    41 }
    42
    43 //stockObjectsReport.SetDataSource(stockValues);
    44 string reportPath2 = @"..\..\CrystalReport3.rpt";
    45
    46 ReportDocument subReport = new ReportDocument();
    47 stockObjectsReport.Load(reportPath2);
    48 subReport=stockObjectsReport.OpenSubreport("CrystalReport2.rpt");
    49 subReport.SetDataSource(stockValues);
    50 crystalReportViewer1.ReportSource = stockObjectsReport;
    51 }
    52 }
    53 }

      水晶报表设计器中首先要设置纸张,接下来主要就是绘制线形成表格。下面打开字段资源管理器,选择数据库专家,将自己新建的Res的.Net对象添加到选定表。

    在子表设计器中通过组专家设置组字段。这里数据的显示主要依靠组和字段,结果见下图4。在主表中右键单击选择插入子表,我这里选择子表数据从已有的建立,当然也可以建立新的啦!

    图2

    图3

    图4
    最后是模拟结果:

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    重构机房收费系统总结1之配置文件+反射+抽象工厂
    win7 下jenkins配置与使用
    ant-jmeter批量脚本
    ant批量运行Jmeter脚本遇到 Content is not allowed in prolog.问题及解决方案
    JMeter学习笔记--JMeter前置处理器
    JMeter学习笔记--详解JMeter定时器
    JMeter学习笔记--详解JMeter配置元件
    JMeter学习笔记--详解JMeter逻辑控制器
    JMeter学习笔记--JMeter监听器
    JMeter学习笔记--创建数据库测试计划
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2411647.html
Copyright © 2020-2023  润新知