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 捷徑。例如,以下的 ASP.NET 網頁程式碼片段會在 ScriptManager 控制項中登錄 JavaScript 檔案 ClientCode.js。接著 ClientCode.js 檔案會定義一個使用 $find 方法搭配 ReportViewer Web 伺服器控制項的用戶端 ID 來存取 ReportViewer 執行個體的 rezoom 方法。加入 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 執行個體的方法或屬性會導致例外狀況並且顯示下列訊息:「報表或網頁正在更新。請等候目前動作完成。」isLoading 屬性可用來檢查報表或網頁是否正在更新以及您是否可以存取方法和屬性。這個屬性不會擲回例外狀況。
當網頁或用戶端控制項未執行回傳時,一組方法會要求載入報表。如果未載入報表,叫用這些方法會導致例外狀況並且顯示下列訊息:「無法執行此作業,因為沒有載入的報表。」這些方法如下所列。在使用這些方法之前,請使用 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 登錄。