VS2005水晶报表制作(Winform)

这两天啥也没弄出来,尽琢磨水晶报表来着.不会啊,原以为跟DataGrid差不多,接上数据源就行了.搞得一头雾水,最后算是有点经验了,现在来说一下
这里是采用PUSH模式(推模式)在winform下水晶报表的制作步骤: 

1. 在项目中新建一个架构文件:

a.在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”,模版 选择"数据集",默认名称 Dataset1.xsd。

b.指定数据库位置:

在服务器资源管理器中,右击“数据连接”并选择“添加连接”。根据报表要显示的内容选择表,并拖放在数据集中. 

c.单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。


(这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中,ADO.NET 数据集对象提供数据的描述, 从它可以向Crystal report 添加表。使用 Crystal Report Designer 的“数据库专家”从 ADO.NET 数据集对象添加表)

 


2.添加水晶报表

a.在解决方案资源管理器中"添加新项",从模版中选择crystal report

b.使用报表专家来完成创建报表,"确定"->从项目数据.ADO.NET数据集中选择上一步建好的数据集文件及表,添加到"选中的表"->从"可用字段"中选择需要的字段到"要显示的字段"->选择样式,完成.

c.展开crystal report.rpt,在右上方的"字段资源管理器"中 打开"数据库字段",拖放要显示的字段到Section3(详细资料),并完善报表格式.

3.添加报表浏览器CrystalReportViewer到要显示报表的窗体

若要动态改变数据源,在显示报表Button_Click下 添加一下代码:

baobiao bb = new baobiao(); //baobiao为显示报表的窗体

CrystalReport1 cr = new CrystalReport1();
//cr.Load(Application.StartupPath + "CrystalReport1.rpt");
cr.SetDataSource(myset.Tables["AAA"]); //为报表设置数据源. myset为DataSet1 myset = new DataSet1();关于数据库 //连接和数据集填充部分代码 这里不再赘述 
bb.crystalReportViewer1.ReportSource = cr; //报表->报表浏览器

bb.Show();
总结:在整个制作过程中,有一个误区:在1中添加了一个数据集Dataset1.xsd,并且建立了数据库连接,设置了数据集.在2中向报 表绑定了这个数据集Dataset1.xsd中的表及字段.原以为这样就算设定好了数据源了,其实并不是,这种情况下运行代码显 示出来的报表会发现只有绑定的那几个字段,而没有记录. 报表中的记录实际上是来自于代码中的表"AAA". 如果程序中设 置断点会发现myset中其实有两个表,第一个表是在步骤1中添加的,第二个才是da.fill(myset,"AAA")得到"AAA".

总之,PUSH模式中的DataSet1和数据库是一点关系都没有的,之所以要创建这个DataSet1的原因,就是为了让你能够编辑RPT模版。最后显示出来的数据,全都是你在后台代码中调用SetDataSource给它的。与设计时的数据库没有任何关系的.


所以,有时会有这种情况:以前已经在代码中定义了一个DataSet ds,做报表的时候又要建一个DataSet1 myset,那么设置cr.SetDataSource(???)的时候,???就应该是cr.SetDataSource(ds.tables["AAA"]),而不是

cr.SetDataSource(myset.Tables["AAA"]).

 

突然想到一个问题,如果ds中表的字段和水晶报表中设置好的字段不一样会怎么样呢?不能显示报表?还是报表显示牛头马尾? 先试试,一会再回来.

测试结果:a.ds中字段>报表中设置好的字段, 正常显示. ------------ ">"包含

b.ds中字段<报表中字段,可以显示,少的那部分字段空白. ------------"<"包含于

c.ds中字段与报表中字段完全不同时,不能显示报表并弹出对话框(字段不存在),关闭对话框程序并不退出运行.


原文位置:http://www.cxy.me/doc/5730.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值