2009-06-04 28 views
14

Tôi đang sử dụng Dịch vụ báo cáo SQL, hoạt động hoàn hảo và hiển thị nút in trong IE, nhưng không được hiển thị trong Mozilla Firefox.Dịch vụ báo cáo SQL - Nút In không được hiển thị trong Mozilla

Có ai có ý tưởng nào không?

Tôi đã kiểm tra ra giải pháp này, nhưng nó không làm việc:

http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/7bdf431d-70db-419d-8e98-ef41cad8e2d8

+0

Đó không phải là một giải pháp, nó chỉ là tuyên bố rằng chế độ địa phương in ấn không được thực hiện trong Báo cáo Dịch vụ 2005. – jgallant

+0

vâng, đúng thế, nhờ –

+0

@Muhammad Akhtar: SQL Server phiên bản và phiên bản của bạn là gì ? – Sung

Trả lời

11

Tôi không nghĩ rằng nó sử dụng ActiveX, bởi vì trong sự kiện onclick bảng có một đơn giản:

ReportFramerpvReport.GetReportFrame().contentWindow.print() 

Dù sao, tôi thay thế thứ in này với chức năng in của riêng tôi, vì mã này trên wasn' t làm việc trên FF ..

Tôi biết nó xấu xí ... nhưng nó hoạt động! (Chỉ cần thay thế các giá trị với ControlID bạn ControlName và chắc chắn để thêm jQuery lib trong trang của bạn)

$(document).ready(function() 
    { 
     if ($.browser.mozilla) 
     { 
      try 
      { 
       var ControlName = 'RptDespesas'; 
       var innerScript = '<scr' + 'ipt type="text/javascript">document.getElementById("' + ControlName + '_print").Controller = new ReportViewerHoverButton("' + ControlName + '_print", false, "", "", "", "#ECE9D8", "#DDEEF7", "#99BBE2", "1px #ECE9D8 Solid", "1px #336699 Solid", "1px #336699 Solid");</scr' + 'ipt>'; 
       var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=9.0.30729.1&amp;Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>'; 
       var innerTable = '<table title="Print" onmouseout="this.Controller.OnNormal();" onmouseover="this.Controller.OnHover();" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="' + ControlName + '_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerScript + innerTbody + '</table>' 
       var outerScript = '<scr' + 'ipt type="text/javascript">document.getElementById("' + ControlName + '_print").Controller.OnNormal();</scr' + 'ipt>'; 
       var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + outerScript + '</td></tr></tbody></table></div>'; 

       $("#" + ControlName + " > div > div").append(outerDiv); 

      } 
      catch (e) { alert(e); } 
     } 
    }); 

    function PrintFunc(ControlName) 
    { 
     setTimeout('ReportFrame' + ControlName + '.print();', 100); 
    } 
+0

Bây giờ tôi không có dự án, có vấn đề ở trên. bởi vì tôi đã thay đổi công ty, nhưng giải pháp của bạn là tốt. đó là lý do tại sao tôi lên bầu. Cảm ơn –

+0

Ồ, +1. Nếu điều này làm việc nó sẽ là tuyệt vời. – stimms

+0

Tôi nghĩ rằng nó sẽ làm việc cho 1 trang nhưng nó sẽ không làm việc cho nhiều trang! bất kì giải pháp nào? –

0

Không phải là một giải pháp nhưng một chút thông tin.

Tôi sử dụng SSRS khá thường xuyên cho các dự án nội bộ vì tôi biết đối tượng mục tiêu đều sử dụng IE, nhưng tôi không sử dụng nó cho các ứng dụng bên ngoài web vì tôi đã gặp rất nhiều vấn đề với FF vv), mặc dù tôi chưa bao giờ xem xét các tùy chọn nút in mà tôi nghi ngờ đây có thể là một vấn đề tương tự (kiểm soát trình xem báo cáo được thiết kế chỉ dành cho IE!) vì nó có vẻ ảnh hưởng đến thanh công cụ nói chung.

Tắt số này http://www.windows-tech.info/15/5fb0fd315e07edf8.php có vẻ như một số điều khiển activex được sử dụng và FF không hoạt động mặc dù tôi nhớ một plugin cho phép điều khiển activex được tải nhưng tôi thấy không thể nhớ được.

EDIT: http://www.iol.ie/~locka/mozilla/plugin.htm Tôi chưa bao giờ sử dụng và không thể xác minh nhưng có plugin ở đây.

Đối với các dự án phải đối mặt với web, tôi có xu hướng sử dụng Crystal!

HTH

2

Nếu bạn đang cung cấp chức năng xuất thông qua ReportViewer, người dùng vẫn có thể xuất sang PDF và in. Không phải là hiệu quả/slick như một nút bấm một cú nhấp chuột, nhưng nó là một công việc dễ dàng xung quanh.

+0

Có nhưng đó là bên cạnh điểm của câu hỏi OP – Fandango68

4

Các giải pháp trên không làm việc đối với tôi, vì vậy tôi đã thay đổi sau đây để giải pháp trên sau khi kiểm tra việc trả lại html.

ReportViewerGeneral_ctl05 -> id của pager
VisibleReportContentReportViewerGeneral_ctl09 -> id của div chứa kết quả của báo cáo.
PageLoad -> tham khảo this

function pageLoad() { 

if ($.browser.mozilla && !$("#ff_print").length) { 
      try { 
       var ControlName = 'ReportViewerGeneral'; 
       var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=9.0.30729.1&amp;Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>'; 
       var innerTable = '<table title="Print" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="ff_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerTbody + '</table>' 
       var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + '</td></tr></tbody></table></div>'; 

       $("#ReportViewerGeneral_ctl05 > div").append(outerDiv); 

      } 
      catch (e) { alert(e); } 
     } 
} 


    function PrintFunc() { 
     var strFrameName = ("printer-" + (new Date()).getTime()); 
     var jFrame = $("<iframe name='" + strFrameName + "'>"); 
     jFrame 
     .css("width", "1px") 
     .css("height", "1px") 
     .css("position", "absolute") 
     .css("left", "-2000px") 
     .appendTo($("body:first")); 

     var objFrame = window.frames[strFrameName]; 
     var objDoc = objFrame.document; 
     var jStyleDiv = $("<div>").append($("style").clone()); 

     objDoc.open(); 
     objDoc.write($("head").html()); 
     objDoc.write($("#VisibleReportContentReportViewerGeneral_ctl09").html()); 
     objDoc.close(); 
     objFrame.print(); 

     setTimeout(function() { jFrame.remove(); }, (60 * 1000)); 
    } 
Các vấn đề liên quan