最近在做一个任务item, 要求检查reporting services(2003/2005)格式的报表里hard code的label,并把它们变成从数据库的表里拿出来用, 当时要求是先一个报表, 我想,如果有好多报表,纯用手工来做,不累死才怪,学过一下.net3.5里的linq to XML的特性,好,就用这个来实现。
首先得有一个思路, 大家都知道micorsoft的reporting services无论2003或2005的rdl文件实际上就是一个XML文件,里边的节点格式大致相同, label在xml里都是<textbox>…</textbox>
思路:
1. 找出所有textbox
2. 找出这些textbox的内容里有hardcode中文或英文(用各自的正则表达式来匹配, 本例子只找英文的)
3. 自动根据需要生成不重复的label id给这个hardcode的label, 根据资源表结果生成insert语句
4. 将report的xml内容里hard code的地方,替换成刚加入的label id
5. 原本还可以在DataSets节点下找到取label的存储过程,为它加上新加的field, 不过算了,还不如直接打开报表,刷新一下数据源.
代码如下:
-
后记: 当然可以更自动,遍历多文件之类的,但这种方便的小程序,够用就好, 纯碎是一种方法论.
本文介绍了一种使用LINQ to XML技术自动替换报表中硬编码标签的方法,通过解析RDLC文件,查找并替换硬编码的文本框内容为数据库中获取的数据。

被折叠的 条评论
为什么被折叠?



