Giải pháp cuối cùng (cũng hoạt động trong SSRS 2012!)
Nối tập lệnh sau vào tệp sau (trên Máy chủ SSRS)
C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js
function pageLoad() {
var element = document.getElementById("ctl31_ctl10");
if (element)
{
element.style.overflow = "visible";
}
}
Lưu ý : Như azzlak đã lưu ý, tên của div không phải lúc nào cũng vậy ctl31_ctl10. Đối với SQL 2012 hãy thử ctl32_ctl09và đối với 2008 R2 hãy thử ctl31_ctl09. Nếu giải pháp này không hoạt động, hãy xem HTML từ trình duyệt của bạn để xem liệu tập lệnh có hoạt động đúng cách hay không khi thay đổi thuộc overflow:autotính thành overflow:visible.
Giải pháp kiểm soát ReportViewer
Chèn vào .aspxtrang (hoặc vào một .csstệp được liên kết , nếu có) dòng kiểu này
#reportViewer_ctl09 {
overflow:visible !important;
}
Lý do
Chrome và Safari hiển thị overflow:autotheo cách khác với IE.
SSRS HTML là HTML QuirksMode và phụ thuộc vào lỗi IE 5.5. Các trình duyệt không phải IE không có mã quirksmode của IE và do đó hiển thị HTML một cách chính xác
Trang HTML được tạo bởi các báo cáo SSRS 2008 R2 chứa một trang divcó overflow:autokiểu dáng và nó biến báo cáo thành một báo cáo vô hình.
<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
Tôi có thể xem các báo cáo trên Chrome bằng cách chuyển overflow:autosang overflow:visibletrang web được tạo theo cách thủ công bằng Công cụ dành cho nhà phát triển của Chrome ( F12).
Tôi thích giải pháp của Tim , nó dễ dàng và hiệu quả.
Nhưng vẫn còn một vấn đề: bất cứ khi nào người dùng thay đổi tham số (báo cáo của tôi sử dụng tham số!) AJAX làm mới div, thẻ tràn: tự động được viết lại và không có tập lệnh nào thay đổi nó.
Chi tiết kỹ thuật này giải thích vấn đề là gì:
Điều này xảy ra bởi vì trong một trang được xây dựng bằng bảng AJAX, chỉ có bảng AJAX thay đổi trạng thái của chúng mà không làm mới toàn bộ trang. Do đó, các OnLoadsự kiện bạn đã áp dụng trên <body>thẻ chỉ được kích hoạt một lần: lần đầu tiên trang của bạn tải. Sau đó, việc thay đổi bất kỳ bảng AJAX nào sẽ không kích hoạt các sự kiện này nữa.
Người dùng einarq đã đề xuất giải pháp này :
Một tùy chọn khác là đổi tên hàm của bạn thành pageLoad. Bất kỳ hàm nào có tên này sẽ được gọi tự động bởi asp.net ajax nếu nó tồn tại trên trang, cũng như sau mỗi lần cập nhật một phần. Nếu bạn làm điều này, bạn cũng có thể xóa thuộc tính onload khỏi thẻ body
Vì vậy, đã viết kịch bản cải tiến được hiển thị trong giải pháp.