crystal report使用总结。

张新林 2003-05-23 05:36:50
这周开始用crystal report做报表,记得刚开始使用时一头雾水,无从下手,在这儿也询问了大家许多问题,虽然没能一一得到解答,但总算也有不少帮助。在此想把我一星期的学习、使用的心得做个交流,希望新手可以减少上手时间,少走弯路,同时也希望高手不吝赐教。谢谢。
...全文
703 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
shala2002 2010-06-13
  • 打赏
  • 举报
回复
MARK一下了。
牛牛Alex 2003-07-08
  • 打赏
  • 举报
回复
sc
kld3000 2003-06-20
  • 打赏
  • 举报
回复
关注

不错不错

张新林 2003-06-20
  • 打赏
  • 举报
回复
如果报表图表深化有什么问题欢迎交流.
msn:gjinlin@hotmail.com
张新林 2003-06-16
  • 打赏
  • 举报
回复
报表图形的深化处理的实现。
1. 最好是先了解一下报表处理模型
ms-help://MS.VSCC/MS.MSDNVS.2052/crystlmn/html/crconreportprocessingmodel.htm
2. 图表处理的原理。
假如数据库的数据如下:
string1 string2 string3 int1
a b1 c1 1
a b1 c2 2
a b2 c4 3
b b1 c1 2
b b1 c2 3
我们所希望实现的效果如下:
以string1列作为X轴,进行统计那
string1=a时,int1的和是6
string1=b时int1的和是5
那么产生的统计如下:

3. 什么是深化。
我理解深化是指数据显示以多层来进行显示,用户选择感兴趣的数据,然后显示选择数据下的详细图表或数据情况。
比如:
string1 string2 string3 int1
a (6) b1 (3) c1(1) 1
c2(2) 2
b2 (3) c4(3) 3
b(5) b1 (5) c1(2) 2
c2(3) 3
先是显示string1分类的数据(或图型)对int1进行求和
a:6
b:5
当用户选择string1的a数据时,那么继续显示a低下的以string2作为类统计的数据。
b1:3
b2:3
同理,用户选择了b1后,显示以string3为为类统计的数据。
C1:1
C2:2
这样就达到深化的效果。
4.分组
要实现报表的深化必须先进行分组,
对上边的数据进行以string1,string2,string3进行分组,合计后的数据如下:
string1 string2 string3 int1
a (6) b1 (3) c1(1) 1
c2(2) 2
b2 (3) c4(3) 3
b(5) b1 (5) c1(2) 2
c2(3) 3
在cystal report的deigner上插入分组的方法是,任决节上右键选择”插入”-“分组”如图:

这里分别插入以string1,string2,string3作为分组.



4. 加入图表:任决节上右键选择”插入”-“”图表”


在分组后,就有了组为统计的int1和,以引而制作图表。
现图表专家。
类型是图表类型,选择您想要图型,要注意的是数据这个选项卡
更改为:是指出现在x轴上的刻度,而显示是出现在Y轴上的数据,就是当string1的数据发生改变时(string1只有a,b两种改变)y轴上显示的数据是多少。
以string1生成图表放在报表页眉上(每个报表一次),而以string2生成的统计图会放在string1组header上,以string3生成统计图放在string2组header上。以此类推。



5. 隐藏显示除报表页眉节的所有节。方法是:在节右键_选择深化。

只要设置深化完成,crystal report就自动处理要深化的节。因为”报表页眉”没有进行深化显示完成,所以报表一Load进行来时只是显示报表页眉的图型。
6. 编写公式。
如果只有两层的深化,点击string1分组效果的图型看到string2统计图的情况就不用编写公式,到上边第五步骤就完成了。但是如果要实现三层以上的分组那么必须编写公式。
Crystal Report在点击完string1,深入到下一层(string2)的时候,会把所有图形string2/string3/…等分组的图表都显示出来(单只是数据没有问题)。
为此要在显示string2的图形时把string3的图表所在节做”抑制显示”。实现抑制显示方法是:在节右键_格式化节…--弹出节专家—选择“抑制显示(无深化)”复选筐,这样就做到了抑制显示这个图型的节。


但并非所有时候都需要抑制显示该节,当显示string2分组时要抑制显示string3..string4分组的节,显示string3时要抑制显示string4以下层的节。显示这个是有条件的抑制显示。为此需要编写公式,进行条件的抑制显示。如下图:

这时开始进行公式编辑。
报表处理过程为自顶向下,如果某一节是循环的节,那么先循环完该节再处理下一节。比如:

报表页眉
组1
组2
明细资料
报表处理是
1. 输出页眉
2. 输出组1(第一个组1)(a=1)
3. 输出组2(组i下的组2)(a=1,抑制显示=true)
4. 输出组1页尾(a=2)
5. 回到第二步(下一个组1)。
6. 输出页尾
为了在组一显示时不显示组2的的方法是
在第二步定义一个变量a=1
在第三步判断如果a=1就不显示组2(抑制显示=true)
在第5步把a=2。
1.在组1定义一个公式,并把a的值设置为1如下:
whileprintingrecords; //表示输出报表时
numbervar a:=1
2.在页尾定义一个
whileprintingrecords;
numbervar a:=2
3.在组2的格式化节中,编写”抑制显示”公式
numbervar a=1 //如果等于1 返回true。
一句话:如果在组1不想显示组2的节,就是组1做标记,在组2做判断,然后再在组1的组页尾把标记示为其它值。
wangcl 2003-05-30
  • 打赏
  • 举报
回复
动态报表!表的列行都不能固定的有没有人能搞定呢
szseesea 2003-05-30
  • 打赏
  • 举报
回复
mark
llsico 2003-05-30
  • 打赏
  • 举报
回复
问一个菜鸟级问题
直接把excel作为数据源,如何读取,编辑,保存到原来的excel里面去阿
luxizhao 2003-05-30
  • 打赏
  • 举报
回复
好像标尺只有到20啊。
luxizhao 2003-05-30
  • 打赏
  • 举报
回复
不要意思不太明白,可以说的清楚点么?
luckysusan 2003-05-30
  • 打赏
  • 举报
回复

mark
luxizhao 2003-05-30
  • 打赏
  • 举报
回复
对了,我想请问搂主,crystal report中报表的页面宽度
可以设置么?不知道为什么,我用起来好像不能加大宽度的。
我用的是crystal report 9.0。
foxtoo2000 2003-05-29
  • 打赏
  • 举报
回复
4、对于图表的形成,如何能传参数来控制图表查询或分组的结果??
这是我做图表时存在的问题,一直没有解决,希望各位能给个好的意见,同时希望斑竹能再讲解的深入一点,呵呵,最好能以WEB页面为例,借贵宝地谈了自己的一些问题,多有得罪,谢谢!希望斑竹能解答。。。。
foxtoo2000 2003-05-29
  • 打赏
  • 举报
回复
3、对于报表的ReportSource,我只能用绝对地址吗?如何使用相对地址??或其他灵活的方式??
foxtoo2000 2003-05-29
  • 打赏
  • 举报
回复
1、请问:如果我只要报表页眉来显示统计图,而下面的其他不要,我把它们显示的信息删除并隐藏后,为何还有一段空白的页面,应怎样去除??
2、我应怎样去除图表上的联接,既在图表上不能点击!(如果点击图表,会出现“CrystalReportViewer - CrystalReportViewer1 ,Error: 渲染页失败。”的消息)
donger2000 2003-05-29
  • 打赏
  • 举报
回复
收藏
张新林 2003-05-29
  • 打赏
  • 举报
回复
七。报表设计过程:
规划报表内容 :给出创建报表之前需要注意的设计事项的大纲。
访问和添加数据 :说明如何连接到数据源、链接数据库表以及向报表添加数据。
字段和文本对象 :说明如何在报表上放置报表对象以生成所需数据。
筛选数据 :说明如何选择和限制数据库记录。
对数据进行分组、排序和总计 :说明如何组织报表中的数据。其中一些选项包括:向报表添加组、小计、运行总计和百分比。
执行记录计算 :说明如何通过创建和向报表中添加公式字段来自定义报表中的数据。
格式化数据 :说明如何向报表添加颜色、边框、阴影和条件格式。
改进报表外观 :说明如何添加图表和子报表,用户可以在这些图表和子报表上深化以访问报表的更详细资料。
lesho 2003-05-28
  • 打赏
  • 举报
回复
ding
张新林 2003-05-28
  • 打赏
  • 举报
回复
六.crystal report designer
1.报表组成:
对于新报表,Report Designer 分为五个报表节-报表页眉/页眉 /详细资料 /报表页脚 /页脚


报表页眉 :(整个报表只出现一次,且首先出现)
放在“报表页眉”节中的对象只在报表开头输出显示一次。
“报表页眉”节通常包含报表的标题和其他希望只在报表开始位置出现的信息。

报表页脚 :(整个报表只出现一次,最后出现)


页眉 :
放在“页眉”节中的对象输出显示在每个新页的开始位置。

“页眉”节通常包含希望在每页的顶部出现的信息。它可以包括文本字段(如章节名、文档名或其他类似信息)。该节也可以用来包含字段标题。在报表中这些字段

标题将作为标签显示在字段数据列的顶部。



页脚 :
放在“页脚”节中的对象输出显示在每页的底部。

该节通常包含页码。


详细资料 :(重复出现的数据)
放在“详细资料”部分中的对象随每条记录输出显示。

图表或交叉表不能放置在该节中。
放在该节中的公式对每条记录进行一次求值。

2.工具条:
一是主工具条:能过它能切换是否查看字段列表。
二是插入工具条:通过它插入图形、分组等。
3.字段资源管理器(出现在左边的列表)
1.数据库字段:公式、字段、参数、组名、运行总计和未绑定字段等等。
张新林 2003-05-27
  • 打赏
  • 举报
回复
这儿做一个报表查看器,它可以查看以后所制作的报表,它基本于winform的。
a.添加一个工程
b.添加一个form
c.拉一个CrystalReportViewer控件到form上(如果不能看到该控件,请添加对 CrystalDecisions.Windows.Forms 命名空间的引用)
d.添加一按钮用于打开报表
c.为该按钮添加事件代码如下
private void btnSelectReport_Click(object sender, System.EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "Select Crystal Reports file";
dlg.Filter = "Crystal Reports (*.rpt)|*.rpt|All Files (*.*)|*.*";
dlg.InitialDirectory = "C:\\Program Files\\Microsoft Visual Studio.NET\\Crystal Reports\\Samples\\Reports";
if (dlg.ShowDialog() == DialogResult.OK)
{
this.Cursor = Cursors.WaitCursor;
crystalReportViewer.ReportSource = dlg.FileName;
this.Cursor = Cursors.Default;
}
}

使用的命名空间有:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

这样只要用户选择了报表就能显示出来。
vb代码
Private Sub btnSelectReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectReport.Click
Dim dlg As New OpenFileDialog()
dlg.Title = "Select Crystal Reports file"
dlg.Filter = "Crystal Reports (*.rpt)|*.rpt|All Files (*.*)|*.*"
dlg.InitialDirectory = "C:\Program Files\Microsoft Visual Studio.NET\Crystal Reports\Samples\Reports"
If (dlg.ShowDialog() = DialogResult().OK) Then
Me.Cursor = Cursors.WaitCursor
crystalReportViewer().ReportSource = dlg.FileName
file = dlg.FileName
Me.Cursor = Cursors.Default
End If
End Sub
加载更多回复(9)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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