← 返回所有博客文章

像医疗行业中常常会有对报表续打功能的要求,即数据更新之后,续接上次打印的位置,开始打印更新的数据。这种需求非常普遍,应用非常广泛。

ActiveReports在打印报表方面可以说已经做的非常完善,今天我们就来学习如何在ActiveReports中实现续打功能。

开发环境:

区域报表+Visual Studio

实现思路:

根据用户选择的续打的位置即数据行,开始打印,即所选择行之后的所有数据可见, 而之前的数据隐藏。

实现方法:

1. 新建基于代码的区域报表 SectionReport1

2. 定义变量

public int count=0;//用于记录当前已经加载的数据行数。
       public int Total;// 接收 用户要续打的行号
       public int TotalOfPage = 13;//每页固定显示的行数量
       public int pagenumberTemp;//获取当前页码
       public int n;


 

3. 增加SectionReport1 的构造函数,用来传递用户所选择的数据行

public SectionReport1(int TotalTemp)
      {
        //初始化 续打的行号
          Total = TotalTemp;
          InitializeComponent();
      }

 

3. 添加 FetchData事件,这个事件中表示每显示一条记录,则执行一次该方法,所以在这个方法中添加计数器,表示现在报表已经处理了多少条记录了。

 private void SectionReport1_FetchData(object sender, FetchEventArgs eArgs)
        {
            //每显示一条记录+1;
            count++;
        }

 

4. 添加PageStart事件表示所选行之前页的内容不可见。

        private void SectionReport1_PageStart(object sender, EventArgs e)
        {
            //每页初始化时,判断当前页是“续打行” 之前的页或之后的页

            pagenumberTemp = Convert.ToInt32(this.PageNumber);//获取当前页号

            // 之前页所有控件隐藏
           if(pagenumberTemp< n+1)
            {
                foreach (ARControl item in this.detail.Controls)
                {
                    item.Visible = false;
                }
                foreach (ARControl item in this.pageHeader.Controls)
                {
                    item.Visible = false;
                }

                foreach (ARControl item in this.pageFooter.Controls)
                {
                    item.Visible = false;
                }
          


            }

           // 当前页,之前的先隐藏控件,在Detatil区域中

            if (pagenumberTemp == n + 1)
            {
                
                    foreach (ARControl item in this.pageHeader.Controls)
                    {
                        item.Visible = false;
                    }

                    foreach (ARControl item in this.pageFooter.Controls)
                    {
                        item.Visible = false;
                    }
                
            }

            if(pagenumberTemp>n+1)
            {

                foreach (ARControl item in this.pageHeader.Controls)
                {
                    item.Visible = true;
                }

                foreach (ARControl item in this.pageFooter.Controls)
                {
                    item.Visible = true;
                }


            }

          

        }

5. 添加detail_Format 事件,控制将所选行的所在页,未选中的行隐藏。

public void detail_Format(object sender, EventArgs e)
        {
            //控制报表的 Detail 区域控件的可见性。

            //如果小于“续打的行号”,则隐藏
            if (count < Total)
            { foreach (ARControl item in this.detail.Controls)
                {
                    item.Visible = false;
                }
            }

            //如果大于“续打的行号”,则显示
            if (count >= Total)
            {
                foreach (ARControl item in this.detail.Controls)
                {
                    //可获取控件类型,如果为线则隐藏
                   // var temp=item.GetType();
                    item.Visible = true;
                }

            }

        }

 

示例程序:

 

您在使用产品过程中有任何疑问,可以登录官方产品技术社区和经验丰富的技术工程师、ActiveReports开发人员交流:了解更多

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16