我有一个水晶报表页面,数据需要查询N多表,最后生成我需要的数据,用水晶报表的形式展现给用户。
    生成数据部分已经使用存储过程来写了,整个页面显示需要耗时6-10分钟,生成的结果数据有6万左右,最后也是10万级的,基本上不会超过100万。
    水晶报表在翻页时,我的理解是必须重新绑定,否则就不会显示数据,所有现在的情况是,数据显示出来之后,用户每翻页或跳转一次,也都需要等很长时间。现在想要解决的问题
   1、在第一次读取数据之后,将查询的结果集存储在某个地方,用户翻页时,直接读取存储的数据集,再进行显示。
    2、当用户退出当前水晶报表显示页面时,自动删除临时存储的结果集数据
    3、由于水晶报表页面可能会被多人同时访问,需要考虑同一页面存储的数据要能进行区分不要告诉我,让我在服务器端进行分页,如果那样,水晶报表在打印导出时,都会出现问题。
期待高手相助。如果有多种方法可以实现,请说明利弊,谢谢了。

解决方案 »

  1.   

    具体到一个6万~10万行的数据,无论是哪种方式都会占用大量资源
    如果再上大并发,那么基本上都扛不住了。
    水晶报表的本身的分页机制是这样的,接收到请求后(比如说第5页),重新连接数据源,拉数据、按规则分好页,然后只返回第5页到前端页面上来。
    使用独立版本的话,可以在第一次操作的时候,就把数据保存到rpt实例里面,以后每次操作,只要打开这个实例就行了
    不用再访问数据源
    但是vs自己带的这个版本不可以,只能依赖于缓存。水晶报表应用,预览、打印、导出时都需要重新连接数据源(或报表源),
    可以缓存报表对象或者缓存dataset
    而针对不同的情况,可以用session,cache,viewstate三种缓存方式你可以参考下
    http://msdn.microsoft.com/zh-cn/library/ms227721.aspx
    以及这个页面上相关的连接。客观地说,用 VS带的这个水晶报表版本做大数据量的大并发,是不大可行的。
      

  2.   

    文件 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\商品进出差价 {E0D5F6C9-C78B-4696-8469-6D01793C7E7C}.rpt 内出错:
    获取组页码失败。