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_ctl09
và đố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:auto
tính thành overflow:visible
.
Giải pháp kiểm soát ReportViewer
Chèn vào .aspx
trang (hoặc vào một .css
tệ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:auto
theo 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 div
có overflow:auto
kiể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:auto
sang overflow:visible
trang 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 OnLoad
sự 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.