前久發現以前用ReportView開發的一個軟件的報表,在IE11上運行時出錯,陸續查了好幾天才解決了問題。
開發環境:
VS2010,ReportView 10.0.402,RDLC報表模板
問題:
1.查詢時報表出錯。
2.報表控件上不顯示打印按鈕。
3.打印按鈕顯示出來后,打印不了。
原因解決:
1.查詢時報表出錯:
在報表模板中加入了“橫線”控件所致,刪除即正常了。
2.報表控件上不顯示打印按鈕:
原因:
由于ReportView的打印功能是依賴于一個RSClientPRint的ActiveX控件的,而ActiveX只能運行在IE瀏覽器上。
微軟改變了IE11的User-Agent
IE11:User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
IE10:User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
致使ReportView控件服務器端判斷當前的IE11瀏覽器為非IE瀏覽器,沒有發送創建“打印”按鈕的相關js代碼,所以沒有顯示打印按鈕。
解決:
在網站根目錄下創建App_Browsers目錄加入browser文件。

<browsers> <browser id="IE11" parentID="Mozilla"> <identification> <userAgent match="Trident//7.0; rv:(?'version'(?'major'/d+)(/.(?'minor'/d+)?)(?'letters'/w*))(?'extra'[^)]*)" /> <userAgent nonMatch="IEMobile" /> </identification> <capture> <userAgent match="Trident/(?'layoutVersion'/d+)" /> </capture> <capabilities> <capability name="browser" value="IE" /> <capability name="layoutEngine" value="Trident" /> <capability name="layoutEngineVersion" value="${layoutVersion}" /> <capability name="extra" value="${extra}" /> <capability name="isColor" value="true" /> <capability name="letters" value="${letters}" /> <capability name="majorversion" value="${major}" /> <capability name="minorversion" value="${minor}" /> <capability name="screenBitDepth" value="8" /> <capability name="type" value="IE${major}" /> <capability name="version" value="${version}" /> </capabilities> </browser> <!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko --> <browser id="IE110" parentID="IE11"> <identification> <capability name="majorversion" match="11" /> </identification> <capabilities> <capability name="ecmascrjavascript" value="true" /> <capability name="Javascriptversion" value="1.5" /> <capability name="msdomversion" value="${majorversion}.${minorversion}" /> <capability name="w3cdomversion" value="1.0" /> <capability name="ExchangeOmaSupported" value="true" /> <capability name="activexcontrols" value="true" /> <capability name="backgroundsounds" value="true" /> <capability name="cookies" value="true" /> <capability name="frames" value="true" /> <capability name="javaapplets" value="true" /> <capability name="supportsCallback" value="true" /> <capability name="supportsFileUpload" value="true" /> <capability name="supportsMultilineTextBoxDisplay" value="true" /> <capability name="supportsMaintainScrollPositionOnPostback" value="true" /> <capability name="supportsVCard" value="true" /> <capability name="supportsxmlHttp" value="true" /> <capability name="tables" value="true" /> <capability name="supportsaccessKeyAttribute" value="true" /> <capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" /> <capability name="vbscript" value="true" /> </capabilities> </browser></browsers>View Code3.打印按鈕顯示出來后,打印不了:
原因:
由于ReportView在頁面生成時并不直接加載RSClientPrint控件,而是在點擊打印按鈕時由JS動態添加OBJECT元素來加載RSClientPrint控件,問題就在這里。
原來IE11在添加OBJECT元素后并沒有從服務器端加載RSClientPrint控件,所以打印無效。
解決:
在aspx頁面中直接加入OBJECT元素。
<%if(Request.Browser.Type.IndexOf("IE11")>-1){%> <object id="ReportViewer1_PrintObj" classid="CLSID:5554DCB0-700B-498D-9B58-4E40E5814405" codebase="/Reserved.ReportViewerWebControl.axd?Culture=2052&CultureOverrides=True&UICulture=2052&UICultureOverrides=True&ReportStack=1&ControlID=57e8d903ef7748f7a0c02a1c6bdb851d&Mode=true&OpType=PrintCab&Arch=X86#Version=2009,100,1750,0" style="display: none;" VIEWASTEXT=""></object><%} %>注意:object 的id="ReportViewerID"_PrintObj,codebase=路徑,可能由于控件版本的不同而和本例不同。
新聞熱點
疑難解答