欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

FastReport使用方法(C/S版)

程序员文章站 2022-04-05 11:27:05
前言 这两天群里一直有群友问一些关于FastReport的问题,结合他们的问题,在这里做一个整理,有不明白的可以加 FastReport 交流群 群 号:554714044 工具 VS2017 +FastReport 开始 1.新建项目,添加三个按钮。预览、设计、打印 2.添加FastReport ......

 前言

这两天群里一直有群友问一些关于fastreport的问题,结合他们的问题,在这里做一个整理,有不明白的可以加

fastreport 交流群

554714044

工具

vs2017 +fastreport

 

开始

FastReport使用方法(C/S版)

1.新建项目,添加三个按钮。预览、设计、打印

FastReport使用方法(C/S版)

 

2.添加fastreport 引用,这里有三个dll文件

3.思路:首先打印要有模板,要有打印的数据,两者结合呈现出我们想要的打印格式,然后进行各种操作。这个思路一定要清晰,这样我们才能知道我们需要做什么。

话不多说上代码:(这里只给出了最简单的逻辑)

using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.windows.forms;
using fastreport;

namespace fastreporttest
{
    public partial class form1 : form
    {
        public form1()
        {
            initializecomponent();
        }
        public string url = "test.frx";//文件路径(目前存放在运行目录下面,方便调试),后续建议做数据库文件管理,存放在数据库
        report frt = new report();

        /// <summary>
        /// 打印控件事件开始准备工作
        /// 获取打印模板文件
        /// </summary>
        private void printprepare()
        {
            frt.load(url);
            frt.registerdata(printdata(), "tab1");
            frt.getdatasource("tab1").enabled = true;
        }

        private void 预览_click(object sender, eventargs e)
        {
           
            printprepare();
            frt.show();
        }

        private void 设计_click(object sender, eventargs e)
        {
            printprepare();
            frt.design();
        }

        private void 打印_click(object sender, eventargs e)
        {
            printprepare();
            frt.printprepared();
            frt.printsettings.showdialog = false;
            frt.print();
        }

        /// <summary>
        /// 虚拟打印数据源、
        /// 数据源建议:
        /// 1.数据源最好在数据库建立单独的表管理,这样每次要修改打印格式,不用编译代码,直接修改数据库即可
        /// 2.多个数据源的,如果存在主从关系,建议建立视图,直接查询视图,方便数据处理。
        /// 
        /// </summary>
        private datatable printdata()
        {
            datatable dt = new datatable();

            dt.columns.add("id", typeof(int));
            dt.columns.add("name", typeof(string));
            dt.columns.add("price", typeof(decimal));

           
            for (int i = 0; i < 10; i++)
            {
                datarow dr = dt.newrow();
                dr["id"] = i;
                dr["name"] = "测试" + i.tostring();
                dr["price"] = i * 10;
                dt.rows.add(dr);

            }

            return dt;
        }
    }
}

 

fastreport 设置

添加好以上的代码,我们就可以运行看一下效果

FastReport使用方法(C/S版)

file 

FastReport使用方法(C/S版)

 

save as :另存为,备份用,不多说

page setup:页面设置,常用FastReport使用方法(C/S版)paper:设置纸张规格 margins:页边距

其余三个很少用到。

printer setup :打印机设置,这个界面我们可以在打印的时候默认不弹出,如果需要制定打印机或者其他信息,

可以把 frt.printsettings.showdialog = false; 改成 frt.printsettings.showdialog = true;即可

FastReport使用方法(C/S版)

edit

此部分不常用,略

view

FastReport使用方法(C/S版)

这个我们经常用得到。f4 显示属性,data 数据源,toolbars 显示工具栏

insert 

FastReport使用方法(C/S版)

插入一些特殊的格式或字体。其中subreport 特别注意,我们有的时候需要添加侧边栏的时候用得到。barcode 添加条形码或者二维码。

report

FastReport使用方法(C/S版)

report 对应的内容 和点击左边configure的效果是一样的,都可以添加数据区控制部分。

左侧configure

FastReport使用方法(C/S版)

点击configure 我们可以添加我们需要的数据分区,页头页尾,行头行尾,数据区,分组等

右侧data

FastReport使用方法(C/S版)

此区域设置数据源,系统参数,合计,类型转换。

datasources 代表我们注册进来的数据表

variables 常用的 row# 行号;page# 当前页;totalpages#总页数;

totals 设置合计,计数,平均数,最大值,最小值使用。

FastReport使用方法(C/S版)

code

添加一些我们特殊处理的代码,示例中我写了一个金额大小写转换的例子

 #region 人民币转换
    decimal amount=0;
    private static string strtran(string s, string oldv, string newv)
    {
      return s.replace(oldv, newv);
    }

    /// <summary>
    /// 转换大写人民币
    /// </summary>
    /// <param name="r"></param>
    /// <returns></returns>
    public static string rmbtostring(decimal r)
    {
      decimal r1;
      string s1 = "零壹贰叁肆伍陆柒捌玖";
      string s2 = "分角元拾佰仟万拾佰仟亿拾佰仟万";
      string dx, s;
      r1 = r;
      dx = "";
      if (r1 < 0)
      {
        r1 *= -1;
        dx = "负";
      }
      s = string.format("{0:f0}", r1 * 100);
      int len = s.length;
      for (int i = 0; i < len; i++)
      {
        dx = dx + s1.substring(s[i] - '0', 1) + s2.substring(len - i - 1, 1);
      }
      dx = strtran(strtran(strtran(strtran(strtran(dx, "零仟", "零"), "零佰", "零"), "零拾", "零"), "零角", "零"), "零分", "整");
      dx = strtran(strtran(strtran(strtran(strtran(dx, "零零", "零"), "零零", "零"), "零亿", "亿"), "零万", "万"), "零元", "元");
      if (dx == "整")
        return "零元整";
      else
        return strtran(strtran(strtran(dx, "亿万", "亿零"), "零整", "整"), "零零", "零");
    }
    #endregion          
   

 

 

fastreport 交流群

554714044