|
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個數(shù)據(jù)訪問層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁和站點導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個DropDownList過濾的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁面的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實現(xiàn)的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
導(dǎo)言
正如我們在上一節(jié)的教程中所看到的,有很多可供選擇的方式把參數(shù)的值傳遞到OjbectDataSource的方法里。假如參數(shù)值是采用硬編碼方式,來源于頁面上的一個Web控件,又或者其他可被數(shù)據(jù)源Parameter對象讀取的源,那么這個值可以綁定到輸入?yún)?shù)而不需要寫一行的代碼。
然而有些時候,參數(shù)值來自某些在數(shù)據(jù)源的內(nèi)置Parameter對象里還沒有計算出來的源。假如我們的站點支持我們的考慮那么我們也許希望參數(shù)基于當(dāng)前登錄用戶。又或者我們在參數(shù)傳送到ObjectDataSource的隱含對象的方法前做一些客戶化定制。
無論什么時候調(diào)用ObjectDataSource的Seelect方法,它都會首先觸發(fā)它的Selecting事件,然后才調(diào)用ObjectDataSource的隱含對象的方法,完成后則激發(fā)ObjectDataSource ObjectDataSource的Selected 事件(圖一說明這些事件的順序)。可以在Selecting事件的事件委托中對參數(shù)的值進行設(shè)置或更改。
圖 1: ObjectDataSource的Selected 和 Selecting 事件分別在調(diào)用它的隱含對象的方法之前和之后觸發(fā)
這一節(jié)里我們將看看添加一個接受一個輸入?yún)?shù)方法到DAL和BLL層,參數(shù)名為Month,int類型,方法返回一個EmployeesDataTable對象,里邊包含的是雇傭周年紀(jì)念都指定月份的雇員。我們的例子將編碼設(shè)置為基于當(dāng)前月份,顯示一個“本月雇用周年紀(jì)念員工”列表。
讓我們開始吧!
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個數(shù)據(jù)訪問層 ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個業(yè)務(wù)邏輯層 ASP.NET 2.0數(shù)據(jù)教程之三:母板頁和站點導(dǎo)航 ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù) ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù) ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值 ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個DropDownList過濾的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之九:跨頁面的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實現(xiàn)的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化 ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField系列文章導(dǎo)航:
第一步: 添加一個方法到 EmployeesTableAdapter
在我們的第一個例子里,我們需要添加一個方法來獲取那些雇用日期(HireDate)在某個指定月份的員工。在我們的程序架構(gòu)下為了提供這個功能,我們首先需要在通過特定SQL語句映射出來的EmployeesTableAdapter中創(chuàng)建一個方法。為了實現(xiàn)這一點,首先打開Northwind類型化數(shù)據(jù)集,在EmployeesTableAdapter標(biāo)簽上右鍵選擇“添加查詢”。

圖 2: 在 EmployeesTableAdapter里添加一個查詢
選擇返回一個或多個行和列的SQL語句。當(dāng)?shù)竭_指定SELECT語句窗口時,EmployeesTableAdapter已經(jīng)裝載了默認(rèn)的SELECT語句。簡單地,添加一個WHERE子句:WHERE DATEPART(m, HireDate) = @Month 。其中DATEPART是T-SQL里的一個函數(shù),用作返回日期類型的一部分;在這里,我們使用DATEPART函數(shù)返回雇用日期(HireDate)列的月份部分。

圖 3: 僅返回 HireDate 列的值小于等于參數(shù) @HiredBeforeDate的行
最后,分別把默認(rèn)的方法名FillBy和GetDataBy更改為FillByHiredDateMonth和GetEmployeesByHiredDateMonth 。

圖 4: 選擇比FillBy和GetDataBy更恰當(dāng)?shù)姆椒Q
點擊“完成”結(jié)束向?qū)Р⒎祷氐綌?shù)據(jù)集的設(shè)計界面。這時候EmployeesTableAdapter會包含一套新的方法來獲取指定月份雇用的員工。

圖 5: 新的方法出現(xiàn)在數(shù)據(jù)集的設(shè)計界面
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個數(shù)據(jù)訪問層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁和站點導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個DropDownList過濾的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁面的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實現(xiàn)的主/從報表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
第二步: 在業(yè)務(wù)邏輯層添加方法 GetEmployeesByHiredDateMonth(month)
因為我們的程序架構(gòu)使用了單獨的一層來處理業(yè)務(wù)邏輯和數(shù)據(jù)邏輯,我們需要在BLL里增加一個方法,該方法調(diào)用DAL的方法獲取指定月份里雇用的員工。打開文件EmployeesBLL.cs并添加下面這個方法:
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
return Adapter.GetEmployeesByHiredDateMonth(month);
}
和此類里的其他方法一樣,GetEmployeesByHiredDateMonth(month)僅僅是簡單地調(diào)用DAL并返回結(jié)果。
第三步: 顯示雇用周年紀(jì)念日在本月份的員工
最后一部我們舉例說明如何顯示雇用周年紀(jì)念在本月份的員工。首先,添加一個GridView控件到頁面ProgrammaticParams.ASPx,該頁面在文件夾BasicReporting里。添加一個新的ObjectDataSource控件作為它的數(shù)據(jù)源。配置ObjectDataSource使用類EmployeesBLL并指定SelectMethod屬性為GetEmployeesByHiredDateMonth(month)。

圖 6: 使用EmployeesBLL 類

圖 7: 選擇GetEmployeesByHiredDateMonth(month)方法
最后一屏要求我們給month參數(shù)提供參數(shù)源。既然我們將編碼設(shè)置這個值,就讓參數(shù)源維持它的默認(rèn)選項None,點擊“完成”。

圖 8: 讓參數(shù)源設(shè)置為None
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個數(shù)據(jù)訪問層 ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個業(yè)務(wù)邏輯層 ASP.NET 2.0數(shù)據(jù)教程之三:母板頁和站點導(dǎo)航 ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù) ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù) ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值 ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個DropDownList過濾的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之九:跨頁面的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實現(xiàn)的主/從報表 ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化 ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField系列文章導(dǎo)航:
這將在ObjectDataSource的SelectParameters集合里創(chuàng)建一個未指定參數(shù)值的Parameter對象。
<ASP:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<ASP:Parameter Name="month" Type="Int32" />
</SelectParameters>
</ASP:ObjectDataSource>
要編碼設(shè)置這個參數(shù)值,我們需要給ObjectDataSource的Selecting事件添加一個事件委托。為了實現(xiàn)這一點,到設(shè)計視圖里在ObjectDataSource上雙擊。另一種方式是選中ObjectDataSource在屬性窗口里點擊黃色閃電小圖標(biāo),然后,直接在Selecting這一欄里雙擊或者輸入一個你要使用的事件委托的名稱。

圖 9:點擊屬性窗口里的閃電圖標(biāo)列出Web控件的所有事件
兩種途徑都可以在頁面的代碼隱藏類里增加一個對ObjectDataSource的Selecting事件的事件委托。在這個事件委托里,我們可以通過使用e.InputParameters[parameterName]讀取參數(shù)的值,其中parameterName的值是<ASP:Parameter>標(biāo)簽里的屬性Name的值(InputParameters也可以按照索引訪問,用e.InputParameters[index])。為了把month參數(shù)設(shè)置為當(dāng)前月份,需要在Selecting事件委托里加入如下代碼:
protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["month"] = DateTime.Now.Month;
}
當(dāng)通過瀏覽器訪問該頁面,我們可以看到只有一個員工是在當(dāng)前月份(三月)雇用的:Laura Callahan,他從1994年3月開始雇用。

圖 10: 雇用周年紀(jì)念日在本月份的員工被顯示出來了
總結(jié)
雖然可以用特定的方式聲明ObjectDataSource的參數(shù)值而不需要寫代碼,編程設(shè)置參數(shù)值同樣很容易。我們需要做的僅僅是給ObjectDataSource的Selecting事件增加一個事件委托,它在調(diào)用隱含對象的方式前觸發(fā),并且通過InputParameters集合手工設(shè)置一個或多個參數(shù)值。
本節(jié)結(jié)束基本這一章。下一節(jié)我們開始主從數(shù)據(jù)一章,這一章里我們將著眼于允許訪問者篩選數(shù)據(jù)和主從數(shù)據(jù)處理的技巧。
祝編程快樂!
作者簡介
Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用微軟Web技術(shù)。Scott是個獨立的技 術(shù)咨詢顧問,培訓(xùn)師,作家,最近完成了將由Sams出版社出版的新作,24小時內(nèi)精通ASP.NET 2.0。他的聯(lián)系電郵為mitchell@4guysfromrolla.com,也可以通過他的博客http://ScottOnWriting.NET與他聯(lián)系。
NET技術(shù):ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。