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

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

第二步:在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. python中的装饰器介绍
  2. 三星oneui主屏幕费电_都 9012 年了,三星系统还「负优化」吗?
  3. ORM MVC、模板引擎介绍(建议收藏)
  4. unbuntu运行shell脚本的问题
  5. android键盘弹出,聊天背景不变形
  6. 在mac os10.13系统下 ,将py文件打包成可执行程序后, 里面的路径出现的问题
  7. vue 使用axios
  8. 2015年全年目标及执行情况跟踪
  9. 微端服务器物品备注,HeroM2引擎怎么在装备上添加备注 传奇添加物品备注说明的方法...
  10. javaweb开发后端常用技术_Java web开发需要学习哪些技术?
  11. IDEA集成docker-maven-plugin配置CA安全证书
  12. Apple Pay初探
  13. 【Java】面向对象(二)继承
  14. zencart网店模板
  15. 好久能旅游?新加坡,一座惬意的城市
  16. 在vm虚拟机上安装esd格式的win7系统文件
  17. 使用思维导图的甘特图进行项目排期
  18. Android Studio-开发少年强国App(三)网格列表 0. 需求分享
  19. 背包问题求解(数据结构课设)
  20. 听说台积电去美国建厂出问题了?张忠谋:明年再说

热门文章

  1. HttpServletrequest 注册和登录、request域对象、web动态shop
  2. wget下载提示:无法建立SSL连接
  3. 从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
  4. BP算法浅谈(Error Back-propagation)
  5. 大学生能从计算机游戏中受益,2017年大学英语四级作文习题及范文:大学生玩游戏...
  6. 比价寄快递v1.0.24
  7. Unreal Engine本人教程。UE产品_游戏_宣传片_官网_网站收藏
  8. 拉伯证券|业绩猛增超13倍,主力连续抢筹,这只股收获4连板
  9. web网络安全——网站入侵(三)
  10. python调用地图api_python调用地图api接口