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

简介:       在维护YH过程中遇到了这样一个错误:报表查询到的数据有4页,默认显示第一页,点击下一页,显示正常,再点击下一页,本来应该显示第三页的,结果还是显示第二页,点击末页和首页可以正常显示,输入页码,点击跳转按钮也可以正常显示。

      在维护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 事件即可实现想要的功能了。

 

目录
相关文章
|
Web App开发 前端开发 API
遇到表格,手动翻页太麻烦?我教你写脚本,一页展示所有数据
看到这篇文章的人,想必都是互联网用户吧。你们一定遇到过「表格」。 我们在阅读表格时,可能有这种困惑: 表格不支持关键词搜索 表格不支持按照某列排序 表格每页只能展示10条数据,需要不断翻页,才能看完所有内容 怎么办呢? 如果表格一页能展示所有数据就好了!
123 0
|
8月前
6.3.2 可翻页检视
6.3.2 可翻页检视
23 0
|
JavaScript
问题解决:使用JqGrid实现列表分页,翻页图标无法显示
问题解决:使用JqGrid实现列表分页,翻页图标无法显示
263 0
问题解决:使用JqGrid实现列表分页,翻页图标无法显示
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
|
XML 数据格式
FastReport 4.13.1 中文菜单显示不全或者乱码解决方法
FastReport 4.13.1 中文菜单显示不全或者乱码解决方法 FastReport 4.13.1 中文菜单显示不全或者乱码解决方法: 可以自己编译一个frcc.exe,替换Res目录下的,然后再recompile即可。
1631 0
Rdlc报表出现空白页解决方法(转)
在使用RDLC报表时,碰到这种情况:当只有一页数据时,报表确显示两页,第二页除了报表头之外数据为空。然后,当有多页数据时,最后一页为空。 这个问题很奇怪,网上有很多解决方案,以下的方法可以解决此问题。
1197 0