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

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

作者:csdn博客 崔成龙

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索报表
, 查询
, 解决方案
, 事件
, navigate
, CrystalReportViewer
, CrystalReportViewer 
, session过期跳转
带按钮的翻页
水晶报表、水晶报表教程、水晶报表官网、c 水晶报表、水晶报表是免费的吗,以便于您获取更多的相关知识。

时间: 2024-11-05 12:07:07

YH中完美解决水晶报表的翻页问题的相关文章

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

      在维护YH过程中遇到了这样一个错误:报表查询到的数据有4页,默认显示第一页,点击下一页,显示正常,再点击下一页,本来应该显示第三页的,结果还是显示第二页,点击末页和首页可以正常显示,输入页码,点击跳转按钮也可以正常显示.很奇怪的问题,但是不得不解决,客户那边有要求嘛.功夫不负有心人,历经"千辛万苦"终于解决了.        对于伸手党来说,解决方案当然是最想先看到的,那就先说说我的解决方案吧: [解决方案] 源代码:  protected void Page_Load(o

解决水晶报表提示&amp;ldquo;未知的查询引擎错误&amp;rdquo; FOR VS2010

原文:解决水晶报表提示"未知的查询引擎错误" FOR VS2010 在VS2010环境下运行水晶报表(当然要先装上Crystal Report For VS2010), 在SetDataSource方法附近提示"未知的查询引擎错误",可按如下办法解决:打开app.config,在startup节点添加一个属性useLegacyV2RuntimeActivationPolicy 1: <?xml version="1.0"?> 2: &

ios 中能不能把侧边栏做成翻页效果出来的?

问题描述 ios 中能不能把侧边栏做成翻页效果出来的? 就是侧边栏类似魔方效果翻出来的.主页面不动,另外侧边栏是不是一个view?能不能这么搞?谁搞过

AJAX中文乱码PHP中完美解决方法_AJAX相关

最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助. 众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案. AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时

AJAX中文乱码PHP中完美解决方法

最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助. 众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案. AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时

java 程序中如何调用水晶报表

问题描述 在做JAVA数据库开发时,经常要打印报表的,不知道如何调用水晶报表,请高手们帮助一下,给出个例子看一下 解决方案 解决方案二:帮顶,关注

水晶报表取在页眉栏如何区分前一页和当前页的数据?

问题描述 页眉栏在取数据的时候一般会取当前页的第一条作为页眉栏的数据,但如果说某一组的组尾在当前页的页首的话,那么页眉会取前一页的最后一条记录作为页眉,这两种情况如何区分? 解决方案 解决方案二:顶下~在先等,急!!解决方案三:首先页眉显示的始终是当前页第一条实际记录,而当你组尾作为页首时,因为组尾不是一条实际记录,所以当前页的第一条实际记录就变成上一页的最后一条实际记录.不过正常基本不会让组尾出现在页首的机会,不仅看着别扭,更是有点不合逻辑,你可以进入组专家,有一个保持在一起的属性,勾选它,让

水晶报表抑制显示页脚的问题

问题描述 本人刚接触水晶报表,想让页脚只显示在第一页,第二页开始不显示,通过代码可以实现这个功能,但是虽然不显示了,但是它占用的页面空间还是存在的,有什么方法可以不让它占用这个空间嘛? 解决方案 解决方案二:右击页脚节,进入节专家,勾选抑制显示(此时也可不勾,公式控制显示与否),点击后面的"x+2"(公式)按钮,编辑:PageNumber<>1意思是不是第一页的时候就抑制显示(即不显示)解决方案三:谢谢楼上的回答,从第二页开始页脚是不显示了但是那个位置的空间还是被占用的,有

VC++开发中完美解决头文件相互包含问题的方法解析_C 语言

所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数. 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息.为了实现对话框"应用"按钮,把对话框做的修改立刻更新到view界面上,为此,需要在对话框类中需要保存view类的指针,这样定义关系就变成如下的代码: 复制代码 代码如下:    #ifndef __MYVIEW_H__   #define _