ReportViewer 类
为 ReportViewer Web 服务器控件的客户端编程提供属性和方法。
ReportViewer Web 服务器控件在客户端浏览器中创建该类的一个实例作为您以编程方式与客户端控件交互的处理程序。使用此实例可向服务器以最少的回发自定义客户端控件的行为。
命名空间:Microsoft.Reporting.WebFormsClient
语法
var v = $find(viewerId);
成员
名称 |
说明 |
---|---|
将报表导出为指定的格式。 |
|
在报表区域搜索当前报表中的字符串。 |
|
查找报表中的下一个搜索命中。 |
|
启动“打印”对话框。 |
|
重新计算“ReportViewer”的布局。 |
|
刷新报表。 |
|
获取或设置一个 Boolean 值,该值指示文档结构图是否处于折叠状态。 |
|
获取一个 Boolean 值,该值指示网页是否执行回发或客户端控件是否加载内容。 |
|
获取或设置一个 Boolean 值,该值指示是否折叠参数提示区域。 |
|
获取一个 Microsoft.Reporting.WebFormsClient.ReportAreaContent 枚举值,该值指示报表区域的当前内容类型。 |
|
获取或设置一个 Sys.UI.Point 对象,该对象表示报表区域的滚动位置。 |
|
获取或设置一个表示当前缩放级别的 string。 |
注释
不直接创建 ReportViewer 类的实例,而是访问 ReportViewer 实例。每次在客户端浏览器中呈现 Web 服务器控件时都会创建 ReportViewer 实例,只要在浏览器中打开网页就予以保留并且 Web 服务器控件不再呈现。如果 ReportViewer Web 服务器控件位于 UpdatePanel 控件内部,则每次在客户端浏览器中由局部页面的更新来刷新更新面板时都将释放和重新创建 ReportViewer 实例。
若要访问 ReportViewer 实例,请使用 Sys.Application.findComponent 方法或带有 ReportViewer 实例的 ID 的 $find 快捷方式。例如,在 ScriptManager 控件中,ASP.NET 页下面的代码段注册 JavaScript 文件 ClientCode.js。然后,ClientCode.js 文件定义一个 rezoom 方法,该方法使用 $find 方法访问使用 ReportViewer Web 服务器控件的客户端 ID 定义的 ReportViewer 实例。向 ScriptManager 控件添加脚本引用可确保加载 Microsoft AJAX Library 之后执行注册的脚本。
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="ClientCode.js" />
</Scripts>
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote">
<ServerReport ReportPath="/AdventureWorks 2008 Sample Reports/Company Sales 2008"
ReportServerUrl="http://<servername>/reportserver" />
</rsweb:ReportViewer>
<asp:TextBox ID="TextBox1" runat="server" onchange="rezoom(value)"></asp:TextBox>
以下显示 ClientCode.js 的代码。在大多数情况下,viewerID 变量的值是 ASP.NET 页中 Web 服务器控件的 ID。在 ASP.NET 代码段中,此值为“ReportViewer1”。应当使用 Web 服务器控件的 ClientID 属性可靠地获取客户端 ID。
function rezoom(level) {
var viewer = $find("ReportViewer1");
if (!viewer.get_isLoading() && viewer.get_zoomLevel() != level)
viewer.set_zoomLevel(level);
}
ReportViewer 实例引发的异常
当网页正在执行回发或客户端控件正在加载内容时,访问 ReportViewer 实例的方法或属性将导致异常,同时显示消息:“正在更新该报表或页。请等待当前操作完成。”[The report or page is being updated. Please wait for the current action to complete.]isLoading 属性可用于检查是否正在更新报表或页以及是否能够访问方法和属性。该属性不引发异常。
当网页或客户端控件不执行回发时,一组方法需要加载报表。如果未加载报表,则调用这些方法将导致异常,同时显示消息:“由于未加载报表,无法执行操作。”[The operation cannot be performed because there is no report loaded.]下面列出了这些方法。使用这些方法之前,请使用 reportAreaContentType 属性检查报表区域是否包含报表页。
处理属性更改事件
如果要在属性更改时得到通知,请向 Sys.Component.propertyChanged 事件注册事件处理程序。这是 ReportViewer 实例的基类的事件。例如,下面的代码注册事件来对 zoomLevel 属性的值施加限制。可以在 ScriptManager 控件中添加对以下 JavaScript 代码的脚本引用。
Sys.Application.add_load(function () {
$find(viewerID).add_propertyChanged(viewerPropertyChanged);
});
function viewerPropertyChanged(sender, e) {
if (e.get_propertyName() == "zoomLevel") {
var viewer = $find(viewerID);
if (!viewer.get_isLoading() && viewer.get_zoomLevel() < 20) {
viewer.set_zoomLevel(20);
alert("Reset zoomLevel to 20.");
}
}
}
add_propertyChanged 方法之前发生的属性更改将不会调用事件处理程序。请确保您正确放置 add_propertyChanged 方法以便按预期处理事件。大多数情况下,可以对 Sys.Application.load 事件的事件处理程序内的 propertyChanged 进行注册,如上面的代码示例。但是,由于客户端控件还执行 load 事件中的代码,其 add_load 处理程序可能在执行 add_load 处理程序之前更改您关注的属性,具体取决于 AJAX 客户端框架执行 add_load 处理程序的顺序。要确保处理所有属性更改,可以对 Sys.Application.init 事件的事件处理程序中的 propertyChanged 进行注册。