設定參數保存性
於本節中,您會設定由 ListBox 控制項建立之參數欄位選擇的保存性 (Web 型態之教學課程中)。
如使用工作階段保存「教學課程:使用工作階段保存 ReportDocument 物件模型」教學課程中所示,每當重新載入網頁或使用者按一下 CrystalReportViewer 工具列上的按鈕 (例如 [下一頁] 和 [縮放]) 時,便會遺失 ReportDocument 物件模型中所做的變更。
若要示範參數選擇缺少保存性的狀況
從 [建置] 功能表中,選取 [建置方案]。
如果發生任何建置錯誤,請立即修正。
從 [偵錯] 功能表中,按一下 [啟動]。
在 [ListBox] 控制項中,按住 SHIFT 鍵同時在清單中選取所有的城市。
按一下 [重新顯示報表]。
頁面將會重新載入,並且顯示所有城市中所有客戶的客戶資料錄。這會是一份包含許多頁面的大型報表。
按一下 CrystalReportViewer 工具列中的 [下一頁]。
所選取城市的清單並不會保存。因此報表的第 2 頁不會顯示。相反的,您會再次看到啟動參數設定的畫面 (巴黎和東京)。
返回 Visual Studio,再按一下 [停止] 退出偵錯模式。
您必須將保存性程式碼加入您的應用程式,如此在 ReportDocument 物件模型中所進行的變更才會在重新載入網頁時繼續保存。
開始之前,將保存性程式碼加入 ConfigureCrystalReports() 方法中,只需要將 Else 區塊加入 Not IsPostBack 條件式區塊即可。然後,設定條件式區塊中任一條件之 ArrayList 執行個體的唯一值。頁面啟動時,將 ArrayList 執行個體設為預設值 (巴黎和東京)。頁面重新載入時,擷取儲存在工作階段中的 ArrayList 執行個體。
若要將保存性程式碼加入 ConfigureCrystalReports() 方法
在 ConfigureCrystalReports() 方法中,會剪下將 Paris 和 Tokyo 加入 ArrayList 的兩行程式碼,並貼到 If Not IsPostBack 條件式區塊的底部。
完成後的條件式區塊如下:
If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport) defaultParameterValuesList.DataBind() myArrayList.Add("Paris") myArrayList.Add("Tokyo") End If
if (!IsPostBack) { defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport); defaultParameterValuesList.DataBind(); arrayList.Add("Paris"); arrayList.Add("Tokyo"); }
在條件式區塊底部加入最後一行,指派 ArrayList 執行個體給 Session 的程式碼。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\36bhtx7w.alert_note(zh-tw,VS.90).gif" alt="Note" class="note" />附註</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>您可以把變數名稱當作您所加入之 Session 的字串識別碼。</p></td>
</tr>
</tbody>
</table>
``` vb
Session("myArrayList") = myArrayList
```
``` csharp
Session["arrayList"] = arrayList;
```
將 Else 條件加入 Not IsPostBack 條件式區塊。
在 Else 區塊內,從 Session 擷取 ArrayList 執行個體,並將其轉型為 ArrayList 物件。
myArrayList = Ctype(Session("myArrayList"), ArrayList)
arrayList = (ArrayList)Session["arrayList"];
完成後的條件式區塊如下:
這些對於 ConfigureCrystalReports() 方法的修改確保 ArrayList 目前的執行個體,永遠能夠傳入 SetCurrentValuesForParameterField() 方法。
於下一節中,您必須針對按一下按鈕事件的程式碼進行兩項變更:
- 將您建立的 ArrayList 指派給 Session。
- 將最後兩行程式碼 (配置和顯示報表) 以呼叫 ConfigureCrystalReports() 的方法取代,就可在一段共用程式碼集合上執行此功能。
若要修改按一下按鈕事件方法的程式碼,使其能與工作階段保存一起使用
最後,將下列最後兩行程式碼從按一下按鈕事件方法中刪除。
要刪除的第一行程式碼就是呼叫 SetCurrentValuesForParameterField() 方法的程式行。要刪除的第二行程式碼是將 customersByCityReport 執行個體繫結到 CrystalReportViewer 控制項之 ReportSource 屬性的程式碼。
在下個步驟中,您要加入兩行新的程式碼,取代刪除的程式碼。
在按一下按鈕事件方法內緊接著 foreach 迴圈的外部,加入一行程式碼,將指派 ArrayList 執行個體給 Session。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\36bhtx7w.alert_note(zh-tw,VS.90).gif" alt="Note" class="note" />附註</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>您可以把變數名稱當作您所加入之 Session 的字串識別碼。</p></td>
</tr>
</tbody>
</table>
``` vb
Session("myArrayList") = myArrayList
```
``` csharp
Session["arrayList"] = arrayList;
```
呼叫 ConfigureCrystalReports() 方法。
如此即可擷取 ArrayList 執行個體,並套用至報表,以及繫結報表至 CrystalReportViewer 控制項。
ConfigureCrystalReports()
ConfigureCrystalReports();
您現在已經可以建置及執行專案,以驗證是否已順利重設參數欄位。
![]() |
---|
另一個保存的方法是保存 ReportDocument 執行個體。若要瞭解如何將 ReportDocument 執行個體保存至工作階段中,請參閱「教學課程:使用工作階段保存 ReportDocument 物件模型」教學課程。 |
若要測試 defaultParameterValuesList ListBox 控制項的填入狀況
從 [建置] 功能表中,選取 [建置方案]。
如果發生任何建置錯誤,請立即修正。
從 [偵錯] 功能表中,按一下 [啟動]。
在 [ListBox] 控制項中,按住 SHIFT 鍵同時在清單中選取所有的城市。
按一下 [重新顯示報表]。
頁面將會重新載入,並且顯示所有城市中所有客戶的客戶資料錄。這會是一份包含許多頁面的大型報表。
按一下 CrystalReportViewer 工具列中的 [下一頁]。
所選取城市的清單現在會獲得保存。因此報表的第 2 頁可正常顯示。
返回 Visual Studio,再按一下 [停止] 退出偵錯模式。