水晶报表教程,强烈推荐CSDN上babyt(阿泰)的帖子(以下内容皆转帖自此贴以及其子连接):
http://topic.csdn.net/u/20090713/18/6e14bf28-1979-4ade-9c60-aaf09284553d.html
1.对象的操作
开始之前
先说一下,操作对象,是依靠ReportDocument,
基础代码如下:
-
C# code
-
ReportDocument myReport = new ReportDocument();
string reportPath = Server.MapPath("crystalreport1.rpt");
myReport.Load(reportPath);//PULL或PUSH方式的数据处理
//...
CrystalReportViewer1.ReportSource = myReport;//然后,才是下文中的代码
关于水晶报表里的对象,我们直观的来看一下。
在模板空白处点邮件,选“插入”,鼠标放到“特殊字段”上,不要点,会出现如下菜单。
-
上面这些,都是报表对象或说是报表部件。恩,这些我们都可以进行控制。
操作的基本语法是:
-
C# code
- myReport.ReportDefinition.ReportObjects[对象序号].方法或属性;//或
- myReport.ReportDefinition.ReportObjects[对象名称].方法或属性;
对象序号在 .Net的水晶报表版本里很难直观的看出来,一般他是按加入报表的顺序来排的
这个很难去记住。有时候为了一些需要,在遍历的时候会用的到。
一般我们会用名称。
在对象上点右键,设置对象格式,
在出来的界面上就可以看到对象的名称
ReportObjects就是我们前面所指的报表对象集合,单一对象就是一个ReportObject
对于ReportObject来说,通用的属性有这样一些:
一般我们可以控制对象的位置,通过控制左上角的坐标,也就是top和left属性。
这里说一下水晶报表的坐标系和计量单位。
水晶报表的坐标系,以每个节的左上角为原点,往下往右两个方向递增延展。
计量单位是缇,与厘米的换算关系是:1厘米=567缇
所以在后面的代码中,你会看到我有这样的写法: 567*N 其实也就是N厘米。
另外还有ObjectFormat下面的属性,可以控制对象的隐藏与显示,这个很实用吧,呵呵。
如抑制显示可以这样操作:
-
C# code
- myReport.ReportDefinition.ReportObjects("text4").ObjectFormat.EnableSuppress =true;
ReportObject是个通用对象,而其实际上又是一个具体的对象。他有各自的特殊属性。
以文本框为例,他就会多出一些特性,比如Text属性,这样我们可以修改到文本框的内容。
具体操作如下:
-
C# code
- //更改一个文本框的内容
- TextObject x;x = (TextObject)myReport.ReportDefinition.ReportObjects["text4"];x.Text ="我们的世界";
另外说一下,前面没提到的数据字段,也可以这样操作。
-
C# code
- //调整字段的位置
- FieldObject fo;fo = (FieldObject)myReport.ReportDefinition.ReportObjects["NAME1"];fo.Height =567*3;fo.Width =567*4;fo.Left =567*1;
每个对象都有各自不同的属性,至于具体有多少对象,你可以按一下F2,
在CrystalDecisions.CrystalReports.Engine这个命名空间下,以 Object结尾的,基本都是。
2:子报表里对象的操作
子报表里的对象操作跟主报表是一样的,主要是要先找到这个子报表对象。
下面这个方法是不对的
-
C# code
- SubreportObject subObj;subObj = (SubreportObject)myReport.ReportDefinition.ReportObjects["subreport1"];
这个只会定义子报表在主报表内的特性,不能设置到子报表内的部件
要这样
-
C# code
- myReport.Subreports[子报表序号].ReportDefinition.ReportObjects["xx"];
- //序号从0开始计数,单纯子报表的一个序号
- //或
- myReport.Subreports[子报表名称].ReportDefinition.ReportObjects["xx"];
注意这个名称不是我们在子报表上点右键看到的名称,而是我们在设计子报表时指定的子报表名称
-
C# code
- TextObject subtext;subtext = (TextObject)myReport.Subreports["xyz"].ReportDefinition.ReportObjects["text3"];subtext.Text ="我是子报表里的内容哦";
3:参数的基本操作
参数是程序与报表交互的一个重要媒介,本节只做一个基础说明,后续的章节中会进一步介绍。
新建一个参数p1
拖到模板上,会自动显示为 ?pa1
代码中传递参数给报表的代码为:
SetParameterValue 后面的几个参数依次为:参数名称,参数值,子报表名称(如果是子报表参数的话)。
-
C# code
- myReport.SetParameterValue("pa1", "我是一个参数");
在子报表中建立一个新的参数spa1,注意xyz是子报表名称
-
C# code
- myReport.SetParameterValue("spa1", "我是一个参数","xyz");
当然,参数也可以传递给CrystalreportViewer,这里就不展开说了,用到的时候再说。
单纯从这个代码上来看,textbox和参数似乎可以等价
但是textbox一般只能用于显示一个字符串,但是参数则可以参与公式,过滤数据,控制对象的一些特性等等,用途更广泛一些。
好了,就到这里。这个基本上没有什么需要特别注意的。
修正记录:
20090707:
坐标系原点应该是每个节的左上角,而不是整个模板的左上角