还是水晶报表

在.Net下可以直接在项目中添加新项或现有项,来添加Cystal Report文件。系统会直接将文件生成一个类。例如文件为CrystalReport1,则有代码文件CrystalReport1.cs与之对应。在解决方案里必须打开“显示所有文件”,才能看到该代码文件。

看了很多文章,将报表文件和CrystalReportViewer连接起来,这是非常简单的。但也有局限,尤其对于我要新建一个报表文件来说。要在报表中显示数据,在代码中通过设置报表文件的SetDataSource(DataSet)还不行,必须在报表文件下专门建立与数据表的对应,同时还需要把数据表的字段拖动到新建的报表文件中。只有这样,设置的数据源才能起作用。

而这样使得在运行时定制自己的报表就很难了。因为用户对显示的数据需求是不一样的。可能是全部显示,也可能只显示部分字段。现在我能实现的办法只能是在报表文件中将数据表的所有字段都拖动到报表的相应位置。然后根据传送到数据集的SQL语句来过滤字段。但这样显示出来的数据格式就很困难了。

何况如果用户要显示另外一个数据表,也只能另外新建一个报表文件,再与CrystalReportViewer连接起来。

但我总觉得水晶报表不应该这样弱智啊,可惜我始终找不到解决的方案。

另:在拖动数据表字段到报表中时,可以在属性窗口中看到该字段默认为Field11,Field21……依此类推,并继承IFieldObject对象(看名字应是接口)。但是我却不能在该报表文件的实例中去访问它。

如:报表文件名为CrystalReport1.rpt

     CrystalReport1 crTest = new CrystalReport1();
     则不能象这样访问该字段:crTest.Field11;

    如果该字段放到详细资料节(Section3)中,而Section3是可以访问的,crTest.Section3,但在Section3下还是未能找到Field11。(crTest.Section3.Field11是错误的)

   如果真是这样,就无法使用代码来控制Field11控件。

原文地址:https://www.cnblogs.com/wayfarer/p/5015.html