找回密码
 立即注册

QQ登录

只需一步,快速开始

iceman

社区贡献组

270

主题

1万

帖子

1万

积分

社区贡献组

积分
19311

活字格认证微信认证勋章元老葡萄

iceman
社区贡献组   /  发表于:2012-11-2 11:07  /   查看:5174  /  回复:0
许多文章中都提到 ActiveReports 优越的性能和文件交换功能。所以我将省略一些基础知识。

这篇文章将阐述许多用户都会遇到的问题:“如何在导出报表到 excel 文件时隐藏 Page Header 区域”或者“怎样在导出 excel 文件时是 Page Header 只显示一次”。

在开始之前,我们来看看为什么在导出 excel 文件时会出现这个问题。
每一种导出格式都有一些独有的特性,例如,报表中页面中的所有区域都会导出到特定格式文件。所以导出的文件中就会理所当然的包含报表中的所有区域。这种规则适用于到多数导出格式。但是,由于 excel 中没有页的概念,所以我们将无法得到预期的结果。

因此,我们在导出报表到 excel 文件时,所有报表页面将导出到一个sheet中。结果将是在 excel 文件中多次出现 Page Header 。

解决方法:
在 PageHeader_Format 事件中通过逻辑代码判断是否为第一页,如果不是就设置其 Visible 属性为 False。进而隐藏 Page Header。
代码如下:
  1. private void PageHeader_Format(object sender, EventArgs e)  
  2.      {  
  3.        {  
  4.          if (this.PageNumber > 1)  
  5.          {  
  6.            this.PageHeader.Visible = false;  
  7.          }  
  8.      }
复制代码

这是另外一个问题就出现了,许多用户只想在导出时实现上述效果,而在预览报表时每一页都显示 PageHeader。但是在报表渲染到 Viewer 之后,报表文件是只读的,不可操作的。

下面是完整的解决方案:
解决方法为,我们需要在导出报表时重新运行一次报表。
1.        当报表第一次运行时,Page Header 的 Visible 属性都设置为 true来显示 Page Header。
2.        在我们需要导出报表到 Excel 文件时,重新运行一次报表,设置ShowPageHeaderOnFirstPageOnly 为 true,从而实现Page Header 仅展示一次的效果。
下面为示例代码:
  1.   DataFieldExpressionsReport rpt = new DataFieldExpressionsReport();
  2.             rpt.ShowPageHeaderOnFirstPageOnly = false;
  3.             rpt.Run();
  4.             viewer1.Document = rpt.Document;


  5.             DataFieldExpressionsReport rpt1 = new DataFieldExpressionsReport();

  6.             rpt1.ShowPageHeaderOnFirstPageOnly = true;
  7.             rpt1.Run();
  8.             XlsExport exp = new XlsExport();
  9.             exp.Export(rpt1.Document, "Test.xls");

  10.             System.Diagnostics.Process.Start("Test.xls");
复制代码
您需要登录后才可以回帖 登录 | 立即注册
返回顶部