zoukankan      html  css  js  c++  java
  • FastReport的再次使用

    FastReport.Net是一款功能齐全的报表分析解决方案。

    前两年工作的时候就是使用FastReport进行报表设计,只是当时使用的时候都是调用别人写好的帮助类,直接调用即可。当时让人觉得不明觉厉。呵呵..不过现在再次需要使用到FastReport进行报表的设计打印,以及与rdlc报表进行对比的。所以再次仅记一次初步的使用。

    一、报表的的设计过程

    设计模板----加载数据---调用模板生成报表或者打印。基本上大多数的报表都是如是设计的。模板与数据分离,在调用时再将数据绑定到模板上。

    二、FastReport的初步使用

    使用FastReport设计器承载模板设计和预览

      /// <summary>
           /// 用fastreport设计器承载模板
           /// </summary>
           /// <param name="sender"></param>
           /// <param name="e"></param>
            private void Scan(object sender, EventArgs e)
            {
                DataSet ds = GetDataSource();
               
                report.Clear();  ///清空报表,不然在窗体第二调用时会带不出报表信息
                if (!File.Exists(frxFile))
                {
                    MessageBox.Show("找不到模板:OrderPrint.frx,请先设计模板");
                    report.RegisterData(ds);                                        //注册数据
                    report.SetParameterValue("TType", "类型");                      //传递参数
                    for(int i=0;i<ds.Tables.Count;i++)
                    {
                        report.GetDataSource(ds.Tables[i].TableName).Enabled = true;    //手动设为true,不然在设计器中看不到数据对象
                    }
                    report.Design();           //设计
                    return;
                }
                
                report.Load(frxFile);
                report.SetParameterValue("TType", "类型");
                report.RegisterData(ds);
                report.Prepare();
                report.ShowPrepared();                  //预览显示
            }    
    

    当然有时设计FastReport模板不是简单的设计显示,还需要对其后端进行处理

    例如数据区的table显示,则需要报表模板后端进行处理:

     private void Table3_ManualBuild(object sender, EventArgs e)
        {
          DataSourceBase data1 = Report.GetDataSource("Detail"); // 获取DataSet中表名为Detail的数据源
    
          data1.Init(); // 初始化          
          Table3.PrintRow(0); // 控件Table1打印第0行
    
          Table3.PrintColumns(); // 每打印一行,都要调用 PrintColumn或PrintColumns
    
         
    
          while(data1.HasMoreRows) // 打印重复循环的行
    
          {
    
            Table3.PrintRow(0);
    
            Table3.PrintColumns();
    
            data1.Next(); // 读取下一行
    
          }
    
        }   
    

      

    使用FastReport提供的控件进行操作:

    在【工具箱】---【添加选项卡】---【选择项】--【选择FastReport.dll】。将FastReport控件显示到工具箱中,如下图所示:

    可以通过FastReport提供的控件进行报表的操作。

    例如使用PreviewControl进行报表的展示与打印:

     private void Print(object sender, EventArgs e)
            {
                DataSet ds = GetDataSource();
                string tType = "类型";
                report.Clear();  ///
                report.Preview = this.PreviewDetail;
                if (!File.Exists(frxFile))
                {
                    MessageBox.Show("找不到模板:OrderPrint.frx,请先设计模板");
                    report.RegisterData(ds);
                    report.SetParameterValue("OrderType", orderType);
                    for (int i = 0; i < ds.Tables.Count; i++)
                    {
                        report.GetDataSource(ds.Tables[i].TableName).Enabled = true;
                    }
                    report.Design();
                    return;
                }
    
                report.Load(frxFile);
                report.SetParameterValue("OrderType", orderType);
                report.RegisterData(ds);
                report.Prepare();
                report.ShowPrepared();
                PreviewDetail.Print();    //打印
            }

    显示效果就像rdlc的ReportViewer承载显示rdlc报表一样(就不上图了)。

    最后

    虽然现在只是非常浅简的使用,个人觉得FastReport.net在设计方面还是由于rdlc的,模板设计相对简单,在程序调用方面也比较优秀。但是FastReport.net是收费的。

    Top
    收藏
    关注
    评论
  • 相关阅读:
    创建和发送事件
    (实战)为系统类添加NameValueTable属性,并且添加到相关对话框
    使用GetUniqueIndentifier为某类对象连续编码
    中秋小感
    数据库中取随机数的方法讨论
    CVS添加用户的过程和命令列表
    Mysql中获取刚插入的自增长id的三种方法归纳
    关于Action重复执行两遍的原因
    td内容空的时候,如何显示边框线
    2003下 tomcat 连mysql问题的解决
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4443003.html
Copyright © 2011-2022 走看看