惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 阿泰

水晶报表问题交流与答疑帖-2011/07-08-09 Oracle中可选参数的处理 水晶报表问题交流与答疑帖-2011/04-05-06 水晶报表问题交流与答疑帖-2010/07-08-09【关闭】 【公告】如果发现博客中图片或文件丢失,请在本贴中回复中贴上URL [转]2010年Gartner企业绩效管理四分区 重要通知:为了能提升答疑质量,本博客的答疑转移到CSDN论坛 2009年11月答疑贴 VS2010beta2中RDLC与水晶报表之简单评测 【水晶报表内功心法】--信手拈来,掌控对象 之 多值参数传入 - 阿泰 2009年10月份答疑贴 Oracle 00600 错误解决方法 2009年9月份答疑帖 2009年8月份答疑贴 【水晶报表内功心法】--完美Excel(下) 【水晶报表内功心法】--完美Excel(上) 【水晶报表内功心法】--公式、函数与运行时总计 【水晶报表内功心法】--第一阶段小结 【水晶报表内功心法】--数据过滤
【水晶报表内功心法】--信手拈来,掌控对象
阿泰 · 2009-07-26 · via 博客园 - 阿泰

月初一如既往地忙碌,竟然一点时间也没抽出来。
周末也是一如既往地加班了,好在事情进展地还算顺利,终于有时间写这一篇。

本来的计划是《掌控于股掌之间-代码中传参数、传公式、操作水晶报表里的所有对象
考虑到公式的重要性,会单独写一篇,于是本篇的内容就是参数与对象的控制
而参数的部分,在本篇也是基本操作,后续的进阶操作会结合其他环节进一步说明

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:
坐标系原点应该是每个节的左上角,而不是整个模板的左上角

下一篇:如何过滤数据
【请尊重本人之劳动,转载请注明出处。讨论请至置顶的讨论帖,谢谢】