以程式設計方式設定 ObjectDataSource 的參數值 (VB)
在本教學課程中,我們將研究為 DAL 和 BLL 添加一個方法,該方法接受單一輸入參數並傳回資料。 此範例將以程式設計方式設定此參數。
簡介
正如我們在上一篇教學課程中所看到的,有許多選項可用於以宣告方式將參數值傳遞給 ObjectDataSource 的方法。 例如,如果參數值是硬編碼的、來自頁面上的 Web 控製或位於資料來源 Parameter
物件可讀的任何其他來源中,則可以將該值綁定到輸入參數,而無需編寫一行程式碼。
然而,有時參數值可能來自某個內建資料來源 Parameter
物件之一尚未考慮的來源。 如果我們的網站支援使用者帳戶,我們可能需要根據目前登入訪客的使用者 ID 設定參數。 或者,我們可能需要在將參數值傳送到 ObjectDataSource 的底層物件的方法之前對其進行自訂。
每當呼叫 ObjectDataSource 的 Select
方法時,ObjectDataSource 會先引發其 Selecting 事件。 然後呼叫 ObjectDataSource 的底層物件的方法。 一旦完成,ObjectDataSource 的 Selected 事件就會觸發 (圖 1 說明了這個事件序列)。 可以在 Selecting
事件的事件處理程序中設定或自訂傳遞到 ObjectDataSource 的基礎物件方法中的參數值。
圖 1:ObjectDataSource Selected
和 Selecting
事件在呼叫其底層物件的方法之前和之後觸發 (按一下查看全尺寸影像)
在本教學課程中,我們將著眼於向 DAL 和 BLL 添加一個方法,該方法接受單個輸入參數 (Month
類型) Integer
並 EmployeesDataTable
返回一個物件,該物件填充有在指定的僱用週年紀念日的員工 Month
。 我們的範例將根據當前月份以程式設計方式設定此參數,顯示「本月員工週年紀念日」清單。
現在就開始吧!
第 1 步:新增一個方法至 EmployeesTableAdapter
對於我們的第一個範例,我們需要新增一種方法來檢索在指定月份發生 HireDate
的員工。 為了根據我們的架構提供此功能,我們需要先建立一個對應到 EmployeesTableAdapter
正確 SQL 陳述式的方法。 若要實現此目的,請先開啟 Northwind 類型資料集。 右鍵點擊 EmployeesTableAdapter
標籤並選擇新增查詢。
圖 2:新增查詢 EmployeesTableAdapter
(點擊看大圖)
選擇新增返回行的 SQL 陳述式。 當您到達「指定陳述式」畫面時,SELECT
預設陳述式SELECT
EmployeesTableAdapter
將會載入。 只需新增 WHERE
子句:WHERE DATEPART(m, HireDate) = @Month
。 DATEPART 是一個 T-SQL 函數,它會傳回 datetime
類型的特定日期部分;在本例中,我們使用 DATEPART
傳回 HireDate
列的月份。
圖 3:僅傳回 HireDate
列小於或等於 @HiredBeforeDate
參數的行 (按一下查看大圖)
最後,將 FillBy
和 GetDataBy
方法名稱分別改為 FillByHiredDateMonth
和 GetEmployeesByHiredDateMonth
。
圖 4:選擇比 FillBy
和 GetDataBy
更合適的方法名稱 (點擊看大圖)
按一下「完成」完成精靈並返回資料集的設計介面。 現在 EmployeesTableAdapter
應該包括一套新的方法來訪問在指定月份僱用的員工。
圖 5:新方法出現在資料集的設計介面中 (點擊查看全尺寸影像)
步驟 2:將 GetEmployeesByHiredDateMonth(month)
方法新增至業務邏輯層
由於我們的應用程式架構對業務邏輯和資料存取邏輯使用單獨的層,因此我們需要向 BLL 添加一個方法,該方法向下調用 DAL 以檢索在指定日期之前僱用的員工。 開啟 EmployeesBLL.vb
檔案並新增以下方法:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
與此類中的其他方法一樣,GetEmployeesByHiredDateMonth(month)
只需向下呼叫 DAL 並傳回結果即可。
步驟 3:顯示本月入職週年紀念日的員工
此範例的最後一步是顯示本月僱用週年紀念日的員工。 首先將 GridView 新增到 BasicReporting
資料夾中的 ProgrammaticParams.aspx
頁面,然後新增新的 ObjectDataSource 作為其資料來源。 配置 ObjectDataSource 以使用 SelectMethod
設定為 GetEmployeesByHiredDateMonth(month)
的EmployeesBLL
類別。
圖 6:使用 EmployeesBLL
類別 (點擊看大圖)
圖 7:選擇 GetEmployeesByHiredDateMonth(month)
方法 (點擊看大圖)
最後一個畫面要求我們提供 month
參數值的來源。 由於我們將以程式設計方式設定此值,因此將參數來源設定保留為預留無選項,然後按一下完成。
圖 8:將參數來源設為「無」(點選查看大圖)
這將在 ObjectDataSource 的 SelectParameters
集合中建立一個未指定值的 Parameter
物件。
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
要以程式設計方式設定此值,我們需要為 ObjectDataSource 的事件建立一個 Selecting
事件處理程序。 要完成此操作,請前往設計檢視並雙擊 ObjectDataSource。 或者,選擇 ObjectDataSource,前往「屬性」窗口,然後按一下閃電圖示。 接下來,雙擊事件旁邊的文字方塊或輸入要使用的 Selecting
事件處理程序的名稱。 作為第三個選項,您可以透過從頁面程式碼隱藏類別頂部的兩個下拉清單中選擇 ObjectDataSource 及 Selecting
事件來建立事件處理程序。
圖 9:按一下屬性視窗中的閃電圖示以列出 Web 控制項的事件
所有三種方法都將 ObjectDataSource Selecting
事件的新事件處理程序新增至頁面的程式碼隱藏類別。 在此事件處理程序中,我們可以使用 e.InputParameters(parameterName)
讀取和寫入參數值,其中 parameterName
是 <asp:Parameter>
標記中 Name
屬性的值 (InputParameters
集合也可以按順序索引,如 e.InputParameters(index)
中所示)。 若要將 month
參數設定為目前月份,請將以下內容新增至 Selecting
事件處理程序:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
透過瀏覽器造訪此頁面時,我們可以看到本月 (3 月) 僅僱用了一名員工 Laura Callahan,她自 1994 年以來一直在該公司工作。
圖 10:顯示本月週年紀念日的員工 (點擊可看大圖)
摘要
雖然 ObjectDataSource 的參數值通常可以以宣告方式設置,而不需要一行程式碼,但以程式設計方式設定參數值很容易。 我們需要做的就是為 ObjectDataSource 的 Selecting
事件建立一個事件處理程序,該處理程序在呼叫底層物件的方法之前觸發,並透過 InputParameters
集合手動設定一個或多個參數的值。
本教學課程結束了基本報告部分。 下一個教學課程從篩選和主詳細資訊場景部分開始,我們將介紹允許訪客篩選資料並從主報告深入詳細報告的技術。
祝您程式設計愉快!
關於作者
Scott Mitchell,七本 ASP/ASP.NET 書籍的作者和 4GuysFromRolla.com 創始人,自 1998 年以來便開始使用 Microsoft Web 技術。 Scott 擔任獨立顧問、講師和作家。 他的新書是 Sams Teach Yourself ASP.NET 2.0 in 24 Hours。 您可以透過 mitchell@4GuysFromRolla.com 或他的部落格 (可以在 http://ScottOnWriting.NET 找到) 與他聯繫。
特別感謝
本教學課程系列已經過許多熱心的檢閱者檢閱。 本教學課程的主要審閱者是 Hilton Giesenow。 有興趣檢閱我即將推出的 MSDN 文章嗎? 如果有,請發信到 mitchell@4GuysFromRolla.com 。