用报表设计器设计报表:(包含多个表格)

第一步:设计出下面样式:

第二步:在configure里ADD时,注意一下,选择数据区时要占到空白才能新建数据,有了数据后,选中数据,才能给数据添加数据头和数据脚。

第三步:在DATA属性页,新增加数据,用的方法是,先选择Save Dictionary,保存至文件,再修改文件内容如下面的XML样式。再选择Open Dictionary选择进来。就会出现下面的数据源中二个表。在Parameters上右击,增加新参数。

                       

修改成如下内容:

<?xml version="1.0" encoding="utf-8"?>
<Dictionary>
  <TableDataSource Name="Table" ReferenceName="Data.Table" DataType="System.Int32" Enabled="true">
    <Column Name="单据标志" DataType="System.String" PropName="Column"/>
    <Column Name="单据类型" DataType="System.String" PropName="Column"/>
    <Column Name="采购金额" DataType="System.String" PropName="Column"/>
    <Column Name="零售金额" DataType="System.String" PropName="Column"/>
    <Column Name="进销差价" DataType="System.String" PropName="Column"/>
  </TableDataSource>
    <TableDataSource Name="Table1" ReferenceName="Data.Table1" DataType="System.Int32" Enabled="true">
    <Column Name="单据标志" DataType="System.String" PropName="Column"/>
    <Column Name="单据类型" DataType="System.String" PropName="Column"/>
    <Column Name="采购金额" DataType="System.String" PropName="Column"/>
    <Column Name="零售金额" DataType="System.String" PropName="Column"/>
    <Column Name="进销差价" DataType="System.String" PropName="Column"/>
  </TableDataSource>
</Dictionary>

第四步:在属性页的报表树,将table1和table2添加事件如下:事件代码如下。

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

到此报表设计器的操作结束,接下来,就是winform里面的调用代码。

第五步:新建一个窗体应用,引用相应DLL。

本机都在C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\FastReport.Editor\v4.0_2016.1.0.0__db7e5ce63278458c\下面。

放一个button,点出后出报表。事件如下:

DataSet ds = new DataSet();
                DataTable table1 = new DataTable();
                table1.TableName = "Table"; // 一定要设置表名称
                ds.Tables.Add(table1);
                // 添加表中的列
                table1.Columns.Add("单据标志", typeof(string));
                table1.Columns.Add("单据类型", typeof(string));
                table1.Columns.Add("采购金额", typeof(string));
                table1.Columns.Add("零售金额", typeof(string));
                table1.Columns.Add("进销差价", typeof(string));

DataTable table2 = new DataTable();
                table2.TableName = "Table1"; // 一定要设置表名称
                ds.Tables.Add(table2);
                table2.Columns.Add("单据标志", typeof(string));
                table2.Columns.Add("单据类型", typeof(string));
                table2.Columns.Add("采购金额", typeof(string));
                table2.Columns.Add("零售金额", typeof(string));
                table2.Columns.Add("进销差价", typeof(string));

所需要的数据自己读取出来,赋值进二个datatable。

foreach (DataRow row in tableTemp.Rows)

{
                    DataRow row1 = table1.NewRow();
                    row1["单据标志"] = row["单据标志"];
                    row1["单据类型"] = row["单据类型"];
                    row1["采购金额"] = row["采购金额"];
                    row1["零售金额"] = row["零售金额"];
                    row1["进销差价"] = row["进销差价"];
                    table1.Rows.Add(row1);
                }

foreach (DataRow row in tableTemp.Rows)
                {
                    DataRow row1 = table2.NewRow();
                    row1["单据标志"] = row["单据标志"];
                    row1["单据类型"] = row["单据类型"];
                    row1["采购金额"] = row["采购金额"];
                    row1["零售金额"] = row["零售金额"];
                    row1["进销差价"] = row["进销差价"];
                    table2.Rows.Add(row1);

}

下面是报表操作代码

Report FReport = new Report();

string sPath = Application.StartupPath + @"test.frx";

FReport.Load(sPath);

//设置参数
                FReport.Parameters.Clear();
                //送入时间参数,就是报表里添加的参数
                Parameter v_param = new Parameter();
                v_param.Name = "YearMonth";//这里的参数名对应报表里的参数名称
                v_param.Value = "2099-05-30/2099-06-26";
                FReport.Parameters.Add(v_param);

// 将DataSet对象注册到FastReport控件中
                FReport.RegisterData(ds);
                FReport.GetDataSource(ds.Tables["Table"].TableName).Enabled = true; //这里的Table对应报表里的数据源
                FReport.GetDataSource(ds.Tables["Table1"].TableName).Enabled = true;//这里的Table1对应报表里的数据源
                FReport.Show();

效果如上:

fastreport使用第一例相关推荐

  1. 《UNIX网络编程卷1》第一例及问题

    <UNIX网络编程卷1>一上来就给了一个例子,新手不容易看懂,估计作者也没有打算让人看懂,作了详尽的解释.新手都想运行这个程序,我也是. 首先,给的程序都是在unix下运行的.这里有全书代 ...

  2. 【内含福利】全球第一例:苹果Apple Card遭盗刷,物理卡或被克隆;谷歌正在试产5G智能手机,最快下周发布……...

    戳蓝字"CSDN云计算"关注我们哦! 嗨,大家好,重磅君带来的[云重磅]特别栏目,如期而至,每周五第一时间为大家带来重磅新闻.把握技术风向标,了解行业应用与实践,就交给我重磅君吧! ...

  3. C语言的第一例,简单易操作

    在信息化.智能化的世界里,可能很早很早 我们就听过许多IT类的名词,C语言也在其中,我们侃侃而谈,到底C程序是什么样子?让我们先看简单的一个例子: #include<stdio.h> in ...

  4. Spring入门第一例

    通过多天对基础语法的学习,早就向往一睹SPRING的芳容.今天按照ITEYE 唐的 教程,第一次运行Spring成功,步骤及注意事项如下: 一.基础环境 Jdk1.8, Eclipse4.71 .Sp ...

  5. RichFaces第一例

    学习JSF和RichFaces一周了,总结以一个小例子为介,分别试验动态皮肤,calendar控件和effect效果. 首先建立web工程,引入必须包jsf1.2,jtsl1.1,richfaces3 ...

  6. c语言算法基础第一例

    ◆题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? 程序分析:兔子的规律为数列1,1,2,3,5 ...

  7. VR医疗|全球首例“换头手术”成功了么?

    用VR技术让病人提前适应"换头手术"后的生活,真的可以吗? 还记得半年前很惊悚的新闻--"换头手术"吗?从小瘫痪的斯皮里多诺为了改变人生决定把自己的脑袋完整割下 ...

  8. 世界首例针对特斯拉自动驾驶判罚:德国裁定Autopilot广告误导买家,特斯拉柏林工厂可能受阻...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI "全自动?别骗人了." 7月14日,德国慕尼黑法院正式裁定,特斯拉在其自动驾驶Autopilot的广告中,存在夸大宣传 ...

  9. Node.js -- Stream 使用小例 ( 流运用 :读取、写入、写出、拷贝)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求 ...

最新文章

  1. 基于Springboot实现的固废物管理系统
  2. 使用tab键分割的文章能快速转换成表格。( )_word排版技巧:活用Enter键提高工作效率...
  3. python 程序开发以及推荐机制设计
  4. CCDP-思科认证网络设计高级工程师
  5. 530. 二叉搜索树的最小绝对差
  6. LeetCode 1759. 统计同构子字符串的数目
  7. 菜鸟学习笔记:Java提升篇3(容器3——泛型、排序)
  8. html选择第一个clss,css3如何选择第一个子元素?
  9. ssh 无法连接 z/OS 主机
  10. mysql的varchar 和text_MySQL中char、varchar和text的区别
  11. Hadoop-HDFS原理及操作(小实验)
  12. http接口开发几种工具简单介绍
  13. html 选择题代码,JS实现简单的选择题测评系统代码思路详解(demo)
  14. SSD-tensorflow-1 demo
  15. 201621123068 Week03-面向对象入门
  16. 2017 多校4 Wavel Sequence
  17. 编译openssl1.1.1f for android
  18. 各类学生机万能卸载攻略
  19. CocosCreator3.x屏幕适配
  20. 全栈设计师必须拥有的Mac软件推荐

热门文章

  1. 如何在AppStore中取消正在审核的App
  2. 理财先从思维上改变第一节开路了
  3. SpringBoot 整合security 实现自定义Token和clientId登录及退出(二)
  4. zabbix监控物理网卡流量
  5. HGNC数据库 HUGO基因命名委员会
  6. USB CDC通信设备子类概述
  7. 如何在HTML5页面中使用鼠标滚轮事件
  8. 【PySpark学习笔记三】spark-submit命令详解
  9. Linux系统监控神器--Collectl
  10. 硬件大熊原创合集(2022/01更新) 内赠红包封面