【原创】RDLC报表WEB页面中斜线消失之解决方法
本来自己时间也不多,不过看了
《,在CSDN上提的就重有人一意答案的》
这个帖子
还是花点时间做做,只处理里面的第一种情况,做个样板。莫让人说我天朝无人。
版本:VS2005
使用水晶报表的人经常会感慨,这么强的报表工具,连个斜线也没有,太不可理解了。
就这么个小效果,折腾坏不少人。
而VS2005里的RDLC工具,是有斜线的,但是当放到WEB应用时,模板上画得好好的,运行起来后,斜线消失了?
简单分析一下HTML代码
- HTML code
<DIV style="overflow:auto;HEIGHT:100%;WIDTH:100%" ID="oReportDiv" onscroll="ShowFixedHeaders()"onresize="ShowFixedHeaders()"> <TABLE CELLSPACING="0" CELLPADDING="0"> <TR> <TD ID="oReportCell" onpropertychange="ShowFixedHeaders()"> <DIV class="a1"> <TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0" COLS="12" LANG="zh-CN" class="r10"> <TR> <TD style="HEIGHT:10.00mm;WIDTH:25.00mm"> </TD> <TD style="WIDTH:5.00mm"> </TD> <TD style="WIDTH:7.50mm"> </TD> <TD style="WIDTH:2.50mm"> </TD> <TD style="WIDTH:5.00mm"> </TD> <TD style="WIDTH:37.69mm"> </TD> <TD style="WIDTH:9.93mm"> </TD> <TD style="WIDTH:4.88mm"> </TD> <TD style="WIDTH:2.55mm"> </TD> <TD style="WIDTH:12.45mm"> </TD> <TD style="WIDTH:22.51mm"> </TD> <TD style="WIDTH:24.95mm"> </TD> </TR> <TR VALIGN="top"> <TD COLSPAN="5" style="HEIGHT:2.50mm"> </TD> <TD ROWSPAN="3" COLSPAN="2"> <v:group coordsize="100,100" coordorigin="0,0" style="WIDTH:47.62mm;HEIGHT:19.84mm"> <v:line from="0,0" to="100,100" strokecolor="#0" strokeWeight="1pt"> <v:stroke dashstyle="solid" /> </v:line> </v:group> </TD> <TD ROWSPAN="3" COLSPAN="5"> </TD> </TR> <TR> <TD COLSPAN="5" style="HEIGHT:12.50mm"> </TD> </TR> <TR> <TD COLSPAN="5" style="HEIGHT:4.84mm"> </TD> </TR> <TR> <TD COLSPAN="12" style="HEIGHT:5.16mm"> </TD> </TR> <TR VALIGN="top"> <TD COLSPAN="2" style="HEIGHT:10.00mm"> </TD> <TD COLSPAN="8"> <TABLE CELLSPACING="0" CELLPADDING="0" LANG="zh-CN"> <TR> <TD style="WIDTH:82.54mm;word-wrap:break-word;HEIGHT:10.00mm;" class="a8"> xxxx </TD> </TR> </TABLE> </TD> <TD COLSPAN="2"> </TD> </TR> <TR> <TD COLSPAN="12" style="HEIGHT:5.00mm"> </TD> </TR> <TR> <TD style="HEIGHT:12.54mm"> </TD> <TD COLSPAN="10" style="border-width:0px;border-top:1pt Solid Black"> </TD> <TD> </TD> </TR> <TR VALIGN="top"> <TD COLSPAN="4" style="HEIGHT:9.88mm"> </TD> <TD ROWSPAN="2" COLSPAN="5"> <v:group coordsize="100,100" coordorigin="0,0" style="WIDTH:60.05mm;HEIGHT:17.46mm"> <v:line from="0,100" to="100,0" strokecolor="#0" strokeWeight="1pt"> <v:stroke dashstyle="solid" /> </v:line> </v:group> </TD> <TD ROWSPAN="2" COLSPAN="3"> </TD> </TR> <TR> <TD COLSPAN="4" style="HEIGHT:7.58mm"> </TD> </TR> <TR> <TD COLSPAN="12" style="HEIGHT:7.50mm"> </TD> </TR> <TR> <TD COLSPAN="12" style="HEIGHT:30.00mm"> </TD> </TR> </TABLE> </DIV> </TD> <TD WIDTH="100%" HEIGHT="0"> </TD> </TR> <TR> <TD WIDTH="0" HEIGHT="100%"> </TD> </TR> </TABLE></DIV>
我们看到线是用VML来绘制的
- XML code
<v:group coordsize="100,100" coordorigin="0,0" style="WIDTH:47.62mm;HEIGHT:19.84mm"> <v:line from="0,0" to="100,100" strokecolor="#0" strokeWeight="1pt"> <v:stroke dashstyle="solid" /> </v:line> </v:group>
但是,页面上却少了让页面解析VML标签的声明
v\:* {behavior:url(#default#VML);}
于是解决思路就有了,主动在页面上附加上这个声明。
实际做起来就比较复杂,因为表面上RDLC页面是内嵌了一个iframe,实际上套了frame后又嵌了个iframe.
反正挺折腾人,解决方法如下:
1:新建一个x.css,放在同目录下
内容为:v\:* {behavior:url(#default#VML);}
2:在aspx的html模式下,加上如下代码即可。
- JScript code
<script language="javascript" type="text/javascript">try{var oWindow = document.getElementById('ReportFrameReportViewer1').contentWindow ;var oHead=oWindow.document.getElementsByTagName('frame')[1].contentWindow.document.getElementsByTagName('head').item(0);var cssRef=oWindow.document.getElementsByTagName('frame')[1].contentWindow.document.createElement("link"); cssRef.setAttribute("rel", "stylesheet") ;cssRef.setAttribute("type", "text/css");cssRef.setAttribute("href", "x.css");oHead.appendChild(cssRef);oWindow.document.getElementsByTagName('frame')[1].contentWindow.document.body.innerHTML=oWindow.document.getElementsByTagName('frame')[1].contentWindow.document.body.innerHTML;}catch (err){}</script>加上这个后,发现了另外一个问题,就是如果线有交叉,那么就只显示一条。
比如我们的模板是这样的(图比较丑,只是做个示例)
显示出来的效果是这样的
模板有4条斜线,实际上只显示了两条。
而他的HTML 代码就是本文最开始的那段。
明显是少了两条,经过试验,如果两条线有交叉
(不一定是视觉上的交叉,
交叉应该是以一条线为对角线,所在的矩形,与另一矩形有任何的交叉,都将会只显示一个矩形)
[解决办法]
顶,好贴。
[解决办法]
学习
[解决办法]
[解决办法]
超强
[解决办法]
好东西....
[解决办法]
up
[解决办法]
又见 阿泰
赞一个!一直做WinFrom下的客户端RDLC,WEB的么搞过!
[解决办法]
强悍!!!
[解决办法]
看看
[解决办法]
拿分走人 !!!
[解决办法]
学习 ,接分。。
[解决办法]
顶一下~~好
[解决办法]
1 前面用css进行解析,显示斜线,很好
2 后面交叉线只显示一条,如何处理,没有说明
[解决办法]
http://www.zhengdus.com
[解决办法]
study
[解决办法]
haode sa
[解决办法]
不是很明白~呵呵~
[解决办法]
MARK!太深奥了~
[解决办法]
强烈的顶!
[解决办法]
学习了,顶
[解决办法]
路过拿分
[解决办法]
学习
[解决办法]
abc
[解决办法]
good
[解决办法]
study
[解决办法]
hao
[解决办法]
操,阿泰,爱死你了
接着收藏
[解决办法]
了解一下
[解决办法]
UP
[解决办法]
//VS2005里的RDLC工具,是有斜线的
请问,VS2005自带水晶报表,这个rpt文件可以画斜线么?
[解决办法]
支持一下
[解决办法]
学习
[解决办法]
牛人.
[解决办法]
了,,,,,,,,,,,,,,
[解决办法]
前来做个记号
[解决办法]
学习一下
[解决办法]
回帖是一种美德!每天回帖即可获得 10 分可用分!
[解决办法]
好东西
[解决办法]
[解决办法]
顶一下...救急用的,非常感谢!
[解决办法]
up a
[解决办法]
狂顶
mark
[解决办法]
呵呵,不错.看谁小看俺们天朝人
[解决办法]
kuang a
[解决办法]
高人,佩服得五投地呀!
[解决办法]
泰哥,我的接分
[解决办法]
强人,不顶不行
[解决办法]
小一下,然不是很明白,慢慢看!
[解决办法]
不属于天朝的小菜鸟掩面飘过……
[解决办法]
学习了,不是很明白。
[解决办法]
进来拜一拜强人!!
[解决办法]
楼主辛苦了
[解决办法]
不懂 帮顶
[解决办法]
强人!!!!!!
[解决办法]
原来csdn有人,呵呵,赞楼主.
[解决办法]
拜天朝大人。。。小民受教鸟。。。
[解决办法]
过来凑凑热闹
[解决办法]
up
[解决办法]
学习学习!