FastReport使用交流,FastReport中国社区FastReport联系电话 联系电话:17347785263

使用报表生成器FastReport.Net打印报表实例

来源:   发布时间:2021-03-18   浏览:次

FastReport .Net是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能报表解决方案。它可以在Microsoft Visual Studio 2005-2019中使用。支持.Net Framework 2.0-4.x,.NET Core 3.0及以上版本。

在FastReport .NET 2021.1的新版本中,我们实现了对.NET 5的支持。添加了新条形码-Deutsce Post Leitcode。将RTF转换为报告对象的算法已得到显着改进。并且还添加了用于转换数字的新功能。欢迎下载体验。(点击下方按钮下载)

立即点击下载FastReport.NET v2021.1最新版

我第一次使用FastReport插件做的功能是打印一个十分复杂的excel表格,有几百个字段都需要绑定数据,至少需要4个数据源,而且用到横向、竖向合并单元格。

我不是直接连接数据库,而是使用RegisterData的方式自己注册DataSet对象,所有的表Table都是代码生成,填充到DataSet中,然后注册到控件中。

最开始尝试使用这个插件做一个简单的功能使用的就是下面的例子,不过花了一整天,还请假了4个人都没有搞出来,晚上拿着别人的模板直接修改,然后测试,就通过了。

之前测试,一直都提示未连接到数据源,原因是我直接使用记事本来向模板添加数据源导致的,平时别人使用的数据源都是自己写代码,调用Design的方式得到的,而且只能是winform程序,webform程序不行,因为要启动com组件。

下面是我总结的特别简单的一个方式,使用RegisterData的方式自己注册DataSet对象。 

1.选择【File】-》【New】 新建FastReport模板,选择下图的1。

2.选择【View】-》【Data】,显示如下,导出Dictionary,保存。

3.编辑导出的.frd文件,编辑完后保存,再导入。 如下:
(1)  TableDataSource 是数据源节点。
(2)  Name是DataSet对象的Table的表名。
(3)  Column是Table的列,模板绑定数据时,使用Column的Name属性。

<?xml version="1.0" encoding="utf-8"?>
<Dictionary>
  <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"/>
  </TableDataSource>
</Dictionary>

4.编辑模板,添加一个Table控件。

第一行直接双击输入文本;第二行直接将右边的数据源托到单元格中;
设置边框、字体。

5.添加事件后台方法 选中Table1,在事件ManualBuild的后面双击,添加下面的代码:

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

说明:
(1) Table控件是从第0行开始的。
(2) 绑定数据的重复行,算作一行。
(3) 输出行之前,要先调用Init() 方法,当有两个数据源,比如data1和data2,data1又是data2的父数据源,需要把data1当做参数,如 data2.Init(data1);
(4) 每打印一行,都要调用 PrintColumn或PrintColumns

6.添加c#代码

新建一个测试页面test.aspx,将一个FastReport控件拖放到页面上(只有按照过FastReport.net,且引用了FastReport.dll,FastReport.Bars.dll,FastReport.Web.dll之后才可以)
添加后页面如下:

<body>
    <form id="form1" runat="server">   
    <cc1:WebReport ID="webReport" runat="server" OnStartReport="WebReport_StartReport" />
    </form>   
</body>

后台方法:

        protected void WebReport_StartReport(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
            DataTable table1 = new DataTable();
            table1.TableName = "Table1"; // 一定要设置表名称
            ds.Tables.Add(table1);
            // 添加表中的列
            table1.Columns.Add("姓名", typeof(string));
            table1.Columns.Add("密码", typeof(string));
            // 任意添加一些数据
            for (int i = 0, maxI = 10; i < maxI; i++)
            {
                DataRow row = table1.NewRow();
                row["姓名"] = "我是" + i.ToString();
                row["密码"] = i.ToString();
                table1.Rows.Add(row);
            }
            Report FReport = (sender as WebReport).Report;       
            string sPath = GetReportsPath("test.frx") ;
            FReport.Load(sPath);
            // 将DataSet对象注册到FastReport控件中
            FReport.RegisterData(ds);
        }
        /// <summary>
        /// 获取fastreport模板的路径
        /// </summary>
        /// <param name="sReportName">模板名称</param>
        /// <returns>返回模板路径</returns>
        public string GetReportsPath(string sReportName)
        {
            return FastReport.Utils.Config.ApplicationFolder + "Reports\\" + sReportName;
        }

7. 测试效果

  1. 对应保存,可以是各种格式;
  2. 对应打印;
  3. 对应分页。

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/2941.html

联系我们
  • 重庆总部 17347785263
购买
  • sales@evget.com
合作
  • business@evget.com


在线
客服
在线
QQ
电话
咨询
023-68661681
返回
顶部