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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值