这两天使用水晶报表For VS2005 做报表开发,发现了一个BUG。新版的水晶报表为了我们开发方便,引入了“设计时预览”新功能。这东西确实很有用,我们无需把报表放到报表查看器并运行应用便可以查看到报表运行结果,但正是因为这个新特性差点没把我给整死。
我们都知道水晶报表分Pull模式和Push模式。Pull模式就是让报表直接连接数据库获取数据,Push模式就是通过ADO.NET(DataSet)为报表提供数据源。当我们使用Push模式做报表开发时(也是最常用的方式),使用“设计时预览”功能时就会出现问题,出来的数据是乱七八糟的东西,并且每次刷新都是不一样,有时刷多几下连数据都没了(关闭报表重新打开预览,数据又出来了)。
经过分析,我觉得造成这种BUG的原因是跟推Push模式本身的性质有关的,因为报表的数据源是使用DataSet,而DataSet在设计时是没有填充数据的,只是个数据的结构。而当使用“设计时预览”功能时,它并没有为我们填充数据集。
为了验证这点,我建了个窗体并加入报表查看器,然后选择了报表(报表查看器的ReportSource属性),接着实例化一个数据集并填充好,最后将数据集设置为报表的数据源(报表对象的SetDataSource方法)。运行后一切正常!!
“设计时预览”功能这个功能本来是很棒的,但现在使用Push模式做报表开发时却形同虚设,希望Business Objects可以早日修复BUG。话说回来,VS2005都出了好些日子了,为什么这个Bug还没修复呢?难道只有我才遇到这个问题?