zoukankan      html  css  js  c++  java
  • 水晶报表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
    最后是模拟结果:

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    Python连接redis时要注意的点
    Python SQLAlchemy多对多外键关联时表结构
    SQLAlchemy中解决数据库访问时出现的Incorrect string value: xxx at row 484
    HDFS集群数据不均衡处理
    elasticsearch数据过期删除处理
    docker使用技巧小记
    kubeadm部署kubernetes-1.12.0 HA集群-ipvs
    k8s全栈监控之metrics-server和prometheus
    k8s小工具
    k8s集群之上游dns--dnsmasq,统一管理kubernetes的dns解析
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2411647.html
Copyright © 2011-2022 走看看