diablox 发表于 2016-9-11 22:25:40

关于页面的控件获取

本帖最后由 Lenka.Guo 于 2016-9-13 09:50 编辑

假设我页面打印显示为3页,我设置了PageFoot处有一条横线 ID为LINE1
我如何在代码里将第三页的LINE1设置隐藏显示。前面2页正常显示?(就是简单用代码的方式来控制3页Page的控件的显示与否)

另外,在代码中只能获取PageNumber,如何能获取当前报表的PageCount,MaxPage一直显示0。

ReportInfo里可以设置 看到PageCount,属性里没有。


Lenka.Guo 发表于 2016-9-12 12:17:37

本帖最后由 Lenka.Guo 于 2016-9-12 12:20 编辑

如果是区域报表,可通过以下代码来获取:SectionReport1 sr = new SectionReport1();
sr.Run();
int TotalPages= sr.Document.Pages.Count;
int CurrentPage=sr.PageNumber;

如果是页面或RDL 报表中,可通过设置 Line 的Visibility中的Hidden 属性为: =IIF( Globals!PageNumber = Globals!TotalPages ,TRUE,FALSE),来表示是否显示


diablox 发表于 2016-9-12 16:17:03

如果是区域报表,可通过以下代码来获取:SectionReport1 sr = new SectionReport1();
sr.Run();
int TotalPages= sr.Document.Pages.Count;
int CurrentPage=sr.PageNumber;
此代码有效,但是无法解决我的问题。
我如何在报表运行的时候得知,当前的PageNumber是最后一页呢?

说的再简单一点。假设报表一共有3页。
我要在第一页,第二页显示pagefoot中的一个控件假设控件ID是line1。第三页不显示这个控件。
实际操作的情况是,在报表run之前,我运行报表代码的时候无法得知当前报表最后的PageNumber,也无法自由控制 1,2,3 页面中page中的控件

没有类似Pages.line1.xxx这种控制控件的方式。

不知道能否明白我说的内容。:)


Lenka.Guo 发表于 2016-9-13 15:29:23

了解您的意思了,测试之后给您答复

diablox 发表于 2016-9-18 13:44:26

该问题麻烦请尽快回复。

Lenka.Guo 发表于 2016-9-18 14:00:38

diablox 发表于 2016-9-18 13:44
该问题麻烦请尽快回复。

您好,通过测试确认
1. 首先在区域报表报表生成时无法获得总页数,所以导致无法控制每一页中控件的可见性。
2. 您的需求是要在页脚部分控制控件,可以插入ReportFooter,这个区域是只在报表的最后一部分来显示的。
或是通过在报表脚本中添加以下方法,硬编码来实现,如代码:

int count = 0;

public void 页脚_Format()
{
        if(count==4)
                this.line1.Visible = false;
}


public void ActiveReport_PageStart()
{
        count++;
}














diablox 发表于 2016-9-18 15:45:36

感谢回复,这个问题主要还是和另外一个帖子有关,就是我询问过关于页面封口的问题。但那个帖子没有下文了。
      首先,ReportFoot我知道是在整个报表最后显示内容。但其实和我的需求是相反的,根据您说明的由于区域报表无法无法控制每一页中控件的可见性。比如我有个报表一共有3页,第一页和第二页由于Details部分数据量大会根据内容自动换页。然后我在PageFoot中增加一条横线,这个操作的作用是用来数据换页的时候在底部增加一条横线,将换页导致的页面开口封闭掉,使报表看起来完整。所以您提供的案例中,ReportFoot只能在报表的最后一页控制这个线是否显示,而不能在每页都加线,然后最后一页不显示。
      第二个问题是,您给的代码里,Count是页面数合计,在PageFoot的Format中,代码示例显示是COUNT==4,这个4我不知道如何出来的。这个4其实应该就是我需要的当前报表的最大页数。这个4我其实在编码的时候是不会知道的。
   AR作为一个有悠久历史的报表软件。我很好奇难道我是第一个有这种需求的用户?上传实际的打印效果

Lenka.Guo 发表于 2016-9-18 15:59:02

diablox 发表于 2016-9-18 15:45
感谢回复,这个问题主要还是和另外一个帖子有关,就是我询问过关于页面封口的问题。但那个帖子没有下文了。 ...

非常抱歉,您在产品使用的过程中带来不便。您是否方便留个联系方式,我们电话沟通。

非常抱歉您之前发的帖子封口问题没有解决: http://gcdn.gcpowertools.com.cn/showtopic-23617-1-1.html;误以为您没有回复就是问题解决了。
非常抱歉。

Lenka.Guo 发表于 2016-9-18 17:48:51

您好,
因为报表是异步加载的方式,所以无法在运行时就给出总页数来对页面控制;因为之前不了解您的应用场景所以有所延误,非常抱歉。
针对您的封口问题,有一个workaround 希望对您有用:

1. 打开报表,选择脚本选项卡,实现ReportEnd事件


2. 通过为除特定要求的页上进行划线来实现封口问题,代码:
public void ActiveReport_ReportEnd()
{
        for (int i = 1; i < rpt.Document.Pages.Count - 1; i++)
        {
                rpt.Document.Pages.DrawLine(1, 11, 12, 11);
        }
}

结果预览:







diablox 发表于 2016-9-18 18:26:01

感谢回复,目前我们在PageFoot处增加了一个固定样式,以此来实现封口功能。我们现在用的SectionReport,并无法取到rpt.Document.Pages.Count这样的东西。我们会试试看其他类型的报表看看能否方便的解决这个问题。此贴可以结贴了~,再次感谢。
页: [1] 2
查看完整版本: 关于页面的控件获取