文档章节

完美解决水晶报表的翻页问题

白志华
 白志华
发布于 2015/10/18 10:56
字数 678
阅读 4
收藏 0

      在维护YH过程中遇到了这样一个错误:报表查询到的数据有4页,默认显示第一页,点击下一页,显示正常,再点击下一页,本来应该显示第三页的,结果还是显示第二页,点击末页和首页可以正常显示,输入页码,点击跳转按钮也可以正常显示。很奇怪的问题,但是不得不解决,客户那边有要求嘛。功夫不负有心人,历经“千辛万苦”终于解决了。

       对于伸手党来说,解决方案当然是最想先看到的,那就先说说我的解决方案吧:

【解决方案】

源代码: 

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["Admin"] == null)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('您的会话时间已过期,请重新登陆!');</script>");
                Response.Write("<script language=javascript>window.top.location.href='../Login.aspx'</script>");
                return;
            }
	   //查询报表并显示(按时间段查询)
	   CheckBetweenTime();
        }

修改后的代码:

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["Admin"] == null)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('您的会话时间已过期,请重新登陆!');</script>");
                Response.Write("<script language=javascript>window.top.location.href='../Login.aspx'</script>");
                return;
            }
            //查询报表并显示(按时间段查询)
              //CheckBetweenTime();
        }

添加代码:

protected void CrystalReportViewer1_Navigate(object sender, EventArgs e)
        {
            //查询报表并显示(按时间段查询)
               CheckBetweenTime();          
        }

 

源码中修改:

<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" DisplayGroupTree="false"  OnNavigate="CrystalReportViewer1_Navigate"/>


再测试,OK了。

 

【解 析】MSDN上查得点击翻页会触发Navigate 事件。CrystalReportViewer 的事件成员: http://msdn.microsoft.com/zh-cn/library/ms227097(v=VS.90).aspx

所以我们只要在CrystalReportViewer 的 Navigate 事件中重新绑定数据源,这样可以从根本上解决问题。

 

网上有说将Page_Load里的数据源绑定操作,写到Page_Init事件中,这也是一种解决方案,但是这个解决方案有局限性:因为我的数据绑定是要通过界面控件数据获取的,而Page_Init事件是页面初始化的事件,这时的控件都没有赋值,所以条件当然就错了,条件错了结果也就错了。而Navigate 事件则是在Page_Init和Page_Load事件结束后,才进行的,条件可以正常获得,然后再进行绑定数据源即可。

注意:CrystalReportViewer 所有的翻页操作都会触发Navigate 事件。我们可以调用CrystalReportViewer 的单独翻页方法:

CrystalReportViewer1.ShowFirstPage();     //首页
     CrystalReportViewer1.ShowLastPage();      //末页
     CrystalReportViewer1.ShowNextPage();      //下一页
     CrystalReportViewer1.ShowPreviousPage();  //上一页
     CrystalReportViewer1.ShowNthPage(N);      //跳转到第 N 页


有了这些方法,只要对这些方法进行重写再结合着Navigate 事件即可实现想要的功能了。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/xiaoxian8023/article/details/7199847

共有 人打赏支持
白志华
粉丝 29
博文 265
码字总数 57524
作品 0
长沙
程序员
C# WinForm开发系列 - Crystal Report

水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。 在VS.Net平台做过报表开发的程序员,一定...

长征2号
2017/09/19
0
0
VS2010水晶报表更新到服务器IIS

前提介绍:服务器上网站IIS发布,服务器上安装了VS2008(亲,自带水晶报表的哟)。服务器版本2003。本地用VS2010采用push模式做的报表。 从开始到结束,尼玛,不知道牺牲了咱多少脑细胞。好吧...

南風
2014/08/09
0
0
编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法

转载地址:http://www.codesky.net/article/doc/201004/2010041706709.htm 一、没有安装部署好水晶报表;(vs2008安装后,不等于安装了vs2008水晶报表) 二、源程序中:VS2008和v2005的水晶报表...

晨曦之光
2012/05/16
112
0
『水晶报表』使用 水晶报表 实现打印

在我们开发各种工具软件的时候,我们不可避免的会遇到打印的问题。而使用.NET开发打印功能,水晶报表或许会是一个十分不象错的选择! 一般步骤: 准备好想要打印的数据源; 制作用于规定打印...

灰大羊
2016/07/05
55
0
报表软件发展趋势

任何一个软件行业的发展,都是和它所服务的行业的发展相对应的。从最初始的信息化把纸张搬的电脑需求,到现在用户对信息在任何时间任何地点都能访问的预期,报表软件也在功能和性能方面取得了...

敏捷商业智能
2010/07/08
631
9

没有更多内容

加载失败,请刷新页面

加载更多

Centos7安装docker和docker-compose

docker-安装 yum update yum install -y docker-engine docker-compose pip install -U docker-compose...

落叶清风
19分钟前
1
0
7个Python实战项目代码,让你感受下大神是如何起飞的!

关于Python有一句名言:不要重复造轮子。 但是问题有三个: 1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。 2、确...

糖宝lsh
20分钟前
1
0
【随记】Maven 与mysql 版本(maven mysql 5.1.38用的最多)

MySQL Connector/J 我的电脑mysql版本为5.7.20-log maven pom.xml 依赖可用5.1.38 pom.xml依赖代码 $加<properties>变量名的实例代码 <properties><!-- data --><mysql-connector-ja......

颖伙虫
22分钟前
1
0
观察者模式

意图: 在对象的内部状态发生变化时,自动通知外部对象进行响应。 构成 被观察者:内部状态有可能被改变,而且又需要通知外部的对象。 观察者:需要对内部状态的改变做出响应的对象。 Java实...

noob_fly
29分钟前
1
0
设计模式之 MVC

MVC 是 模块化思想或者分层思想的实践。 当我们设计一个Web应用的时候,我们的业务流是,读取数据库中的数据,进行逻辑处理,渲染到页面;如果是交互型的页面,那么页面有输入或者事件发生的...

backbye
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部