关于数据量大时报表的处理情况

Bmonkey 2005-06-27 12:56:54
无论用activereport还是crystal report都可以,主要是解决问题的方法,谢谢

1.如果报表数据量非常大,那么是否应该分页显示,显示哪页取哪页数据?
2.如果分页显示的话,那么打印时怎么处理,由于报表的数据源只有一页的数据,那么打印的时候只能打印一当前页,那么是否应该把数据全部取去给报表打印呢?如果数据量很大会造成错误的,请问怎么解决??
...全文
361 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bmonkey 2005-07-08
  • 打赏
  • 举报
回复
谢谢,最近没来,先结贴了.
阿泰 2005-07-02
  • 打赏
  • 举报
回复
白天在外面跑了一天

如果数据量大的话,用分页当然比不分页好~~

Bmonkey 2005-07-01
  • 打赏
  • 举报
回复
啊泰....呵呵,虽然有点麻烦请再看看

我现在想这样做,清单一般都很多,在web下数据多的情况下都分页,但是我现在是在winform情况下,这种情况下分页这样做法好吗?合理吗?
dlkjldjljfalk 2005-07-01
  • 打赏
  • 举报
回复
学习中
Bmonkey 2005-06-30
  • 打赏
  • 举报
回复
我看了一下listview和print的几个控件,现在有点问题
你所说的边打边取,大概是怎么实现的呢?你们封装的控件是否也是用的边打边取的方法呢?你是用print控件的endprint事件来触发打印下一页的控制吗?
如果方便请简要说说你封装的该控件的原理和方法 ^_^
阿泰 2005-06-28
  • 打赏
  • 举报
回复
1: 一般来说用拉的方式比用推的模式快
但是我还是建议你控制每次最大的显示区间,不要用“由客户任意指定区间”

2:我一般是直接用报表软件进行预览显示,
但是前提是我们做的报表一般是数据综合性的报表而不是明细清单,
对于后者我们自己写了控件来处理,显示的时候用了Listview(可控制性更好些)而不是DataGrid
其实直接控制Printer来进行打印可能是最快最有效的方法了,而且也不存在等待的问题
因为你可以边打边取数据,

报表一般用来做数据分析用的,N长的明细数据从分析的角度来说毫无意义
所以做的报表可能来源的原始数据是上亿级别(条数),但是因为先期经过多次中间表汇总准备后
报表实现起来都是很快的,基本不存在明显的等待

有些情况确实需要长时间数据加载的,做一个Splash的提示效果,加个动画,可以缓和一下气氛
而不要仅仅是将鼠标置成沙漏
阿泰 2005-06-28
  • 打赏
  • 举报
回复
1:vs.net里的版本应该只是可以使用,但是不可以分发,所以应该还是需要购买的
2:9.1和9.2并没有太大变化,只是不同的功能版本有些差异,具体价格你可以咨询一下
www.softonline.com.cn
Bmonkey 2005-06-28
  • 打赏
  • 举报
回复
先谢谢啊泰的回复,由于偶晚上无法上网,没法在qq上和你交流,请你继续在这解答,^_^

1.我现在是这样的,分页取数据和显示可以做到,但是分页取出来的数据应该是在Form里显示然后用户点'打印'按钮时再显示报表,把数据推给报表好呢?还是把数据直接就在报表里显示了好?我想知道一下你做这个的通常做法.谢谢

2.请问你一般的做报表的做法,你会给报表提供一个显示数据和浏览数据的Form(比如包含DataGrid)吗?还是直接取出数据就在报表软件里显示?如果是后者那么是取出对应的全部数据给报表吗?取出全部数据时间可能会很长,那么这时提示用户等待吗?
Bmonkey 2005-06-28
  • 打赏
  • 举报
回复
而且vs自带的cr是9.1版本吧,比9.2弱在哪些地方呢?如果用来做统计报表,汇总报表一些比较普通的功能的话9.1是否就足够了呢?9.1是否比9.2便宜呢?谢谢`~~~~~~~~~
Bmonkey 2005-06-28
  • 打赏
  • 举报
回复
啊泰,顺便问一下,如果我们公司买的正版的vs.net的话,crystal report还需要买正版的吗?
就版权这方面的东西,请回帖说说,应为现在产品要用报表,所以可能牵涉这方面的事情,如果要买大概需要多少钱,我们目前只是需要winfrom下的报表,webservice都不需要.
还有如果买activereport需要多少钱呢?
阿泰 2005-06-27
  • 打赏
  • 举报
回复
1:100页数据不算多,水晶报表还可以承受,当然要注意索引,
2:要全部依次打印,必须全部获取数据
3:打印N年数据,确实可能需要,但是可以从程序上控制他一次只能打一年的,
或者一次只能打一个月的都可以,看客户的接受程度及数据量,,不能总由着客户
4:你既然已经实现了分页取数据和显示,为什么不直接打印呢?就差一步,呵呵。
.Net里有PrintDocument可以用,直接打个Form
对于连续打印应该反复调用就行了吧

不用水晶报表不是更好,呵呵
花点力气,省下点钱,,买个水晶报表授权怎么着也得5位数
Bmonkey 2005-06-27
  • 打赏
  • 举报
回复
2:我不清楚现在的一些报表功能是否能实现你这里所说的显示一页才去拉取数据进行打印的功能
分页与打印没有直接关系,不论在哪一页,你都可以实现全部打印
当然也可以选取某些页面进行打印

无论在哪一页我的确可以实现全部打印的功能,但是是否需要在打印事件开始之前全部取除需要打印的数据推给报表呢?如果是,那么加入某个客户脑袋有问题,打印n年的数据(理论上存在)的话,那么会出现内存问题的,是吧?能有其他可行的办法嘛??
Bmonkey 2005-06-27
  • 打赏
  • 举报
回复
我现在就有这样的问题,假如我使用crystal report ,我的数据有一百页甚至更多,我可以在我的程序里面实现分页取数据然后在报表里面显示,我每次取一页的数据,然后推给报表它就可以显示了,对吧.当前页和页数都是我另外计算出来赋值给某个显示控件的,如果用户一直都只是浏览那就没问题了.但是如果此时用户需要打印,而我刚才推给保表的数据只有一页的的数据,那么打印只可能打印刚才推进去的那一页,无法打印其他没有取出来的数据.

我的想法:是不是在打印的时候必须把需要打印的数据,比如100页都取出来,然后给报表,再打印呢?
阿泰 2005-06-27
  • 打赏
  • 举报
回复
我ActiveReports没用过,所以只从水晶报表的角度来大致说一下
1:如果是大数据量(条数非常多)的情况,应该叫做清单而不是报表
这种情况是不适合用水晶报表的,水晶报表似乎不能实现区间页数据的获取
也就是说,水晶报表应该是把数据全部拉下来进行后再进行显示的
2:我不清楚现在的一些报表功能是否能实现你这里所说的显示一页才去拉取数据进行打印的功能
分页与打印没有直接关系,不论在哪一页,你都可以实现全部打印
当然也可以选取某些页面进行打印

水晶报表数据量取决与你的机器的磁盘空间大小,因为他的数据是缓存在本地的
http://www.cnblogs.com/babyt/archive/2005/04/16/138734.html


如果实在要用水晶报表,则注意以下情况(水晶报表9.2企业版本)
文件==》选项==》数据库
选上以下项目
高级选项的Frame里
为提高速度使用索引或服务器
在服务器上执行分组
不区分大小写
异步执行查询
以下项目不选
选择用于浏览的非重复数据

文件==》报表选项

勾选以下项目
总是在本地排序
在服务器上执行分组
为提高速度而使用索引或服务器
异步执行查询
以下项目不选
数据库中的 NULL 值转换为默认值
将其他 NULL 值转换为默认值
选择非重复记录
选择用于浏览的非重复数据
将数据与报表一起保存
创建组树

这些项目可以提高你的报表性能,但是却不能彻底解决大数据问题


对于该种情况,个人建议你自己编写程序来实现分段读取和分段打印,先取到总的数目
然后计算分页等情况,每次只操作一页的数据,效率应该是很高的

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧