报表reportviewer控件使用时,单行文本过长的解决办法

     最近在做winform的报表,客户需要把纸质模板可以在系统中打印。一开始设计,认为vs自带控件reportviewer可以解决,但在测试过程中发现:若单行文本过长,报表自动分页,弊端是分页后,第一页文本框底部边框和第二页文本框顶端边框无法显示,由于客户是政府机关,要求严格,只好解决这个问题。

在解决过程中也是想各种办法

第一种,判断是否分页,分页后,该文本框是否存在本页,若存在,则在相应分页底部和顶端划线,可是搜索属性框,并没有这些属性值,放弃。

第二种,主体加边框,与矩阵重合,矩阵边框不要,使用主体边框,用这种巧妙方式来解决分页带来的问题,它的弊端是,若分页的第二页不满一张,文本框底部边框和主体底部边框会间隔一片空白,不是很美观,所以放弃。

既然自带控件想不到好的解决思路,不如换一种方式。现在流行操作office,已达到我们的目的。我首选了excel模板,把模板做到excel中,根据excel的单元格位置,给单元格或者区域赋值。由于模板复杂,会有合并单元格的情况,excel对于单元格有自带对于行高可以自增长,但对于合并的单元格无效,需要自己写宏,另外,每行的行高默认设置为0到409,对于不确定文本长度不好控制,需要计算文本长度,除以每行字数,在计算最高行高可以容下几行,得出文本需要的行高,最后在向区域内插入行,报表多的情况下,工作任务量增大.

于是,觉得换成word来解决。word的优点是,当分页时,word会自动补充边框,那么在调用word的打印预览功能,跟真实报表一样,客户对那种报表没有要求,只要打印正常就可以,终于找到合适的解决方式。网上有很多向word内写入数据的方法,使用模板,插入标签,赋值即可。那么,它并不是很完美,在打印预览时,会打开文档,关闭打印预览,模板文档无法同时关闭,模板已经写入数据,如果不同时关闭,用户一旦错误的保存了数据,那模板改变,之后的数据完全不对,怎么解决?思路肯定是同时关闭。怎么判断打印预览已经关闭,网上搜索一下,认为应当使用三方控件,可以直接调用word的各种方法,本人不太喜欢过多使用第三方,部署时各种dll需要准备好。

最终找到一种方式,try,catch,finally完美解决,在finally里写循环,一旦打印预览打开,循环执行空方法,关闭后跳出循环,跳出循环在关闭文档,关闭进程,不会提示,进程正在使用。

这样就可以解决,有好的方法可以推荐,交流下哦😊

posted @ 2017-03-26 09:44  云中的angel王  阅读(673)  评论(0编辑  收藏  举报