公司项目的业务要求用户取文件时需要打印文件确认单,使用水晶报表做了这个功能,但是在打印单子的时候第一次总是很慢,据粗略计算大约要等30秒之后才会进行打印,在网上看了好多,许多人也遇到了一样的问题,在Csdn等一些论坛里,大家多数怀疑两种原因:
(1)有人怀疑是因为可能数据量大或者sql写法的问题让检查,我的数据一般只有1-10条左右,应该不是数据的问题
(2)另一种就是建议换控件,不太想使用第三方的东西,还使用过vs里面自带的控件,但是导出会有些问题,可以使用操作office直接导出到word打印,但是又需要在客户机上安装office
在调试的时候发现第一次打印的时候之所以慢是因为SetDataSource()方法上卡了一会,所以我想到了一个方法来解决这个问题,跟大家分享一下。与其说解决,只是找个投机的方法把这个问题隐藏掉。我不太了解水晶报表具体的加载方法,但是根据调试我怀疑在第一次SetDataSource()方法执行的时候水晶报表会加载一些东西所以会很慢,所以我在程序开始运行的时候天下了下面代码:(code内个东西不好使,直接写了)
1 #region 缓存文件清单
2
3 //为了解决水晶报表第一次打印慢的问题
4 DataTable dt = new DataTable();
5 dt.Columns.Add("temp");
6 //水晶报表对象
7 Forms.Report.RptFileList file = new Forms.Report.RptFileList();
8 file.SetDataSource(dt);
9
10 #endregion 缓存文件清单
11 Application.Run(new Forms.frmMain());
2
3 //为了解决水晶报表第一次打印慢的问题
4 DataTable dt = new DataTable();
5 dt.Columns.Add("temp");
6 //水晶报表对象
7 Forms.Report.RptFileList file = new Forms.Report.RptFileList();
8 file.SetDataSource(dt);
9
10 #endregion 缓存文件清单
11 Application.Run(new Forms.frmMain());
看代码很明显,我把这段代码放在了Program.cs中加载主窗体之前,就是让水晶报表程序加载时候就提前加载一次空的DataTable,为的是让水晶报表提前把要加载的东西都提前加载上,这样进入到打印窗体的时候,几乎就是秒打了。。。。也不太会写,希望能对大家的问题有帮助。