水晶报表使用记录

           本项目采用的是VS2019 Community + CRforVS13SP29开发,记录了开发过程中对于水晶报表设计的理解,给自己做个笔记,也给他人一些解决思路,如有说得不对的欢迎指正,好的,下面我们将采用开发步骤的形式展开:

 

1. 先用拉模式设计好报表模板,这样比较容易快速创建模板而无需编写太多代码。先新建项目,并从项目模板里创建一个DataSet

水晶报表使用记录_第1张图片

2. 通过菜单"视图"/“服务器资源管理器”/“数据连接”来载入数据库,并将需要用到的表直接拖动到窗口中,这样以来就直接建立了一个具有Table结构的DataSet,后面就可以直接通过代码给Table中填充数据,而无需用代码建表。

水晶报表使用记录_第2张图片

       另外,为了便于实现动态图片功能,当被载入的数据库表字段里有二进制字段(Access里叫做OLE类型,SqlServer里叫BLOB类型),后续将该字段加入“数据库专家”后,在“字段资源管理器”里直接将该字段拉到报表里,会被报表识别为一个正方形方框(当做动态图片用时,可以视作一个图片控件),那么后续我们用代码给这个字段里写入图片二进制流,就可以方便得实现报表动态图片加载。值得一提的是,这一步只是为了便于给DataSet创建一个表,直接手动添加表也可以,但是有些字段在这里不好创建,比如图片这种OLE/BLOB字段。那就可以先在数据库里建一个有OLE/BLOB字段的表,再通过以上步骤将现成表结构直接拉到DataSet中来,拉进来的OLE/BLOB字段与手动创建的“列”字段的属性页是有区别的,OLE/BLOB字段会有个Source属性,总而言之,这里也相当于给DataSet创建一个数据模型,供“数据库专家”来制作报表模板用,也用于后期代码直接推数据填表。

3. 从项目模板中新建Crystal Reports

水晶报表使用记录_第3张图片

4. 在报表中右键“数据库专家”,前期设计模板的时候,可以直接从“创建新连接”那里连接数据库,可以看到这里已经绑定了ACCESS数据库文件的绝对路径,然后直接从该节点把数据选中到右侧,这样报表运行起来就能看到效果,而此时VS的项目树上也会多出一个该数据库文件。

5. 在主面板上添加一个CrystalReportViewer控件,该控件默认Dock属性是Fill,但是我们也可以在该Form上放置其他控件,工具栏等,用来动态与报表数据进行关联,过滤等操作。

水晶报表使用记录_第4张图片

6.当模板测试没问题的时候,就可以从“视图”/“服务器资源管理器”/“数据连接”把相关数据库连接删除掉,再把第2步中的“数据连接”删掉(不会影响DataSet中已拉出来或已创建好的数据结构),改为把“ADO.NET数据集”下面的DataSet中的数据选中到右边。这样就与数据库路径无关了,我们通过推模式用代码把数据推进DataSet中就好了,这样便于在不同的机器上部署。值得一提的是,之前在实际表里临时创建的表,也可以删掉了。

 

 

 

其他遇到的问题如下:

    水晶报表使用记录_第5张图片

1> 在做动态图片报表模板设计的时候,只在“详细资料”里放入OLE/BLOB字段运行起来没问题,一个框是一个图片。但在其他节放置非OLE/BLOB字段时出了问题,现象是运行起来“详细资料”里的图片每张会重复显示3次。后来尝试不给其他节放置字段,只放置文本对象,线条什么的好像并不影响,放入子报表也没什么影响。可是当一切好了以后,再给其他节放置字段,又没什么影响了,反正挺诡异,大家多试试吧反正。

2> 当你删除了“服务器资源管理器”中的“数据连接”再重新添加连接后,可能会出现以下错误
           CS1061    “Settings”未包含“DatabaseConnectionString”的定义,并且找不到可接受第一个“Settings”类型参数的可访问扩展方法“DatabaseConnectionString”(是否缺少 using 指令或程序集引用?) 

    直接删除飙红的代码,类似:this._connection.ConnectionString = global::xxxxx.Properties.Settings.Default.DatabaseConnectionString;

3> 当报表或者子报表数据不更新,可以尝试在数据库专家里重新创建连接,先不管前面的连接,等它连接失效了才可以右键删除。

水晶报表使用记录_第6张图片

4> 要实现第一页不显示,只在此后的每一页显示。考虑到页眉是每一页都会显示的节,那么在页眉的“节专家”/“抑制显示”中插入公式“pagenumber=1”即可实现。

5> 公式的关键字可以从公式编辑器里“函数”框里看到,如以上提到的pagenumber。

水晶报表使用记录_第7张图片

 

你可能感兴趣的:(水晶报表,Winform)