ActiveReports区域报表中运行时修改报表布局实现方法

发布时间:2013/12/12 00:12 发布者:jian

返回博客中心

ActiveReports 7中所提供的区域报表拥有极强的定制能力,可以在设计时和运行时完成对报表元素的定制操作。比如:在运行时根据用户的权限动态的显示或隐藏部分数据,根据各个数据之间的关系控制其它控件显示的数据。本例主要演示了在运行时动态隐藏客户订单明细报表中第一页之后所有页页眉中显示的内容,第一页需要显示客户名称、住所、交货日期和金额,第一页之后的页眉中只需要显示交货日期。

首先,在VS中创建一个桌面应用程序,并在工程中添加一个ActiveReports 7 基于代码的区域报表模板。

image

然后,在报表中添加相应的控件完成报表基本布局的设计,得到以下结果:

image

最后,我们在pageHeader和detail的Format事件中根据业务逻辑完成对报表布局的动态调整

pageHeader_Format方法中我需要根据当前的页号,对页眉中控件的显示/隐藏状态进行调整,主要代码如下:

    private void pageHeader_Format(object sender, EventArgs e)
    {
        // 没有开始时,将当前页已经显示的数据行数归零
        rowcount = 0;
        // 如果不是第一页,就隐藏页眉中的部分控件
        if (pagecount > 0)
        {
            // 第一页之后,每页可以打印9行数据
            MaxRows = 9;
            #region 第一页之后,隐藏部分控件
            lRow3.Location = lRow1.Location;
            tRow3.Location = tRow1.Location;
            lRow1.Visible = false;
            lRow2.Visible = false;
            lRow4.Visible = false;
            tRow1.Visible = false;
            tRow2.Visible = false;
            tRow4.Visible = false;
            lHeader1.Location = new PointF(lHeader1.Location.X, lRow3.Location.Y + lRow3.Height);
            lHeader2.Location = new PointF(lHeader2.Location.X, lRow3.Location.Y + lRow3.Height);
            lHeader3.Location = new PointF(lHeader3.Location.X, lRow3.Location.Y + lRow3.Height);
            lHeader4.Location = new PointF(lHeader4.Location.X, lRow3.Location.Y + lRow3.Height);
            lHeader5.Location = new PointF(lHeader5.Location.X, lRow3.Location.Y + lRow3.Height);
            #endregion
        }
        pagecount += 1;
    }

然后在detail_Format放中根据当前所显示的数据行数,决定是否需要换页,详细代码如下:

    private void detail_Format(object sender, EventArgs e)
    {
        rowcount += 1;
        // 根据当前打印的数据行数觉得是否换页
        if (rowcount == MaxRows)
            detail.NewPage = GrapeCity.ActiveReports.SectionReportModel.NewPage.After;
        else
            detail.NewPage = GrapeCity.ActiveReports.SectionReportModel.NewPage.None;
    }

最后在窗体中设置报表数据源并显示报表:

    private void Form1_Load(object sender, EventArgs e)
    {
        System.Data.DataTable dt = new DataTable();
        dt.Columns.Add("Code");
        dt.Columns.Add("Name");
        dt.Columns.Add("Count");
        dt.Columns.Add("Price");
        dt.Columns.Add("Sum");
        for (int i = 1; i <= 23; i++)
        {
            dt.Rows.Add(i, "商品" + i.ToString(), 1, 1, 1);
        }
        SectionReport1 rpt = new SectionReport1();
        rpt.DataSource = dt;
        rpt.Run();
        viewer1.Document = rpt.Document;
    }

运行截图,第一页显示了客户名称、住所、交货日期和金额,以及6行详细数据;第二页显示了交货日期和9行详细数据

image

源码下载:VS2010 + ActiveReports 7


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网