主頁(yè) > 知識(shí)庫(kù) > 在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)

在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)

熱門標(biāo)簽:地圖標(biāo)注的公司有哪些 天心智能電銷機(jī)器人 代理接電話機(jī)器人如何取消 400電話辦理哪家性價(jià)比高 遂寧市地圖標(biāo)注app 地圖定位圖標(biāo)標(biāo)注 塔城代理外呼系統(tǒng) 地圖標(biāo)注專業(yè)團(tuán)隊(duì) 濮陽(yáng)外呼電銷系統(tǒng)怎么樣

導(dǎo)言

  在上一章的教程中,我們看了GridView、DetailsView和FormView綁定到OjbectDataSource控件顯示數(shù)據(jù),ObjectDataSource調(diào)用了類ProductsBLL的GetProducts()方法。方法GetProducts()返回一個(gè)有Northwind數(shù)據(jù)庫(kù)的Products表的所有記錄組成的強(qiáng)類型數(shù)據(jù)表。類ProductsBLL還包含了其它返回部分?jǐn)?shù)據(jù)的方法:GetProductByProductID(productID),GetProductsByCategoryID(categoryID), 和 GetProductsBySupplierID(supplierID) 。這三個(gè)方法要求輸入一個(gè)參數(shù)來(lái)指示如何篩選返回的產(chǎn)品信息數(shù)據(jù)。

  ObjectDataSource可以調(diào)用需要傳入?yún)?shù)的方法,不過(guò)為了實(shí)現(xiàn)這一點(diǎn),我們需要指定這些參數(shù)從哪里獲取值。這些參數(shù)的值可以通過(guò)硬代碼傳入,也可以從某類來(lái)源動(dòng)態(tài)地獲取,包括:查詢字符串的值(QueryString),會(huì)話變量(Session variables),頁(yè)面上控件的屬性值,或者其它。

  在這一章的教程里,讓我們開(kāi)始舉例說(shuō)明如何使用參數(shù)設(shè)置一個(gè)硬編碼的值。特別地,我們將著眼于添加一個(gè)DetailsView到頁(yè)面來(lái)顯示一個(gè)名為Chef Anton's Gumbo Mix的特殊產(chǎn)品,它的ProductID是5 。下一步,我們將看看如何基于Web控件設(shè)置參數(shù)的值。特別地,我們將使用一個(gè)TextBox讓用戶鍵入國(guó)家(country),在點(diǎn)擊某個(gè)按鈕后列出駐該國(guó)家的供應(yīng)商。

使用一個(gè)硬編碼參數(shù)值

  第一個(gè)例子,首先添加一DetailsView控件到BasicReporting文件夾里的DeclarativeParams.aspx頁(yè)面。從DetailsView控件的智能標(biāo)記的下拉列表中選擇新建數(shù)據(jù)源…>,然后選擇添加一個(gè)ObjectDataSource 。

圖 1: 添加一個(gè)ObjectDataSource到頁(yè)面

這將自動(dòng)打開(kāi)ObjectDataSource控件的配置數(shù)據(jù)源導(dǎo)航。在第一屏的導(dǎo)航中選擇類ProductsBLL 。

圖 2: 選擇類ProductsBLL

既然我們要顯示一個(gè)特定的產(chǎn)品的信息,我們應(yīng)該使用GetProductByProductID(productID)方法。

圖 3: 選擇GetProductByProductID(productID) 方法

  因?yàn)槲覀冞x擇了這個(gè)包含參數(shù)的方法,導(dǎo)航就多了一屏,在這一屏要求我們定義參數(shù)所用的值。在左邊的列表中顯示我們指定方法的所有參數(shù)。對(duì)于GetProductByProductID(productID)方法則只有一個(gè)參數(shù):productID 。在右邊的參數(shù)源下拉列表中列舉出有可能被作為參數(shù)源的幾類參數(shù)值。既然我們要指定一個(gè)硬編碼的值5用作productID參數(shù),就讓參數(shù)源選項(xiàng)是None并在DefaultValue輸入框鍵入5 。

圖 4: 參數(shù)productID使用硬編碼的值

  完成了配置數(shù)據(jù)源向?qū)Ш?,ObjectDataSource控件的聲明標(biāo)記里就包含了一個(gè)SelectParameters集合,每一個(gè)SelectMethod屬性里指定的方法的參數(shù)都對(duì)應(yīng)一個(gè)Parameter對(duì)象。既然我們這個(gè)例子中的方法只要求一個(gè)參數(shù)parameterID ,那么SelectParameters集合里也就只有一個(gè)元素。SelectParameters集合可以包含任何來(lái)源于System.Web.UI.WebControls命名空間的類。因?yàn)槭怯簿幋a參數(shù)值所以使用基本的Parameter類;如果需要的話你也可以創(chuàng)建自定義參數(shù)類型(custom parameter types)。

asp:ObjectDataSource ID="ObjectDataSource1" runat="server"

 SelectMethod="GetProductByProductID" TypeName="ProductsBLL">

 SelectParameters>

  asp:Parameter DefaultValue="5" Name="productID" Type="Int32" />

 /SelectParameters>

/asp:ObjectDataSource>

  注意:如果你在自己的電腦上跟隨這些步驟聲明標(biāo)記,你可能會(huì)看見(jiàn)這里包含InsertMethod,UpdateMethod和 DeleteMethod 的參數(shù)值,比如DeleteParameters 。ObjectDataSource的選擇數(shù)據(jù)源向?qū)ё詣?dòng)地指定了這些ProductBLL的方法從而實(shí)現(xiàn)插入、更新和刪除,因此,除非你明確地清除它們,否則它們將包含在上面的標(biāo)記里。

  當(dāng)訪問(wèn)本頁(yè)面,Data Web服務(wù)器控件將調(diào)用ObjectDataSource的Select方法,這將調(diào)用類ProductsBLL的GetProductByProductID(productID),并使用“5”這個(gè)硬編碼的值作為輸入?yún)?shù)productID 。此方法將返回一個(gè)強(qiáng)類型的ProductDataTable對(duì)象,它包含一個(gè)數(shù)據(jù)行 - Chef Anton's Gumbo Mix的信息(ProductID為5的產(chǎn)品)。

圖 5: 顯示Chef Anton's Gumbo Mix的相關(guān)信息

設(shè)置Web控件的屬性作為參數(shù)源

  OjbectDataSource控件的參數(shù)值也可以設(shè)置為基于頁(yè)面上的Web控件的值。為了說(shuō)明這一點(diǎn),我們舉一個(gè)使用GridView來(lái)顯示位于用戶指定的國(guó)家的供應(yīng)商的例子。首先,在頁(yè)面上添加一個(gè)TextBox控件讓用戶輸入國(guó)家名稱。這個(gè)TextBox控件的ID屬性設(shè)為CountryName 。再添加一個(gè)按鈕控件到頁(yè)面。

圖 6: 添加一個(gè)ID為CountryName的TextBox控件到頁(yè)面

Next, add a GridView to the page and, from the smart tag, choose to add a new ObjectDataSource. Since we want to display supplier information select the SuppliersBLL class from the wizard's first screen. From the second screen, pick the GetSuppliersByCountry(country) method.

  然后,添加一個(gè)GridView控件到頁(yè)面,從它的智能標(biāo)記,選擇添加一個(gè)新的ObjectDataSource 。因?yàn)槲覀円@示供應(yīng)商信息,所以在配置數(shù)據(jù)源向?qū)У谝黄吝x擇類SuppliersBLL 。第二屏,選擇GetSuppliersByCountry(country)方法。

圖 7: 選擇GetSuppliersByCountry(country) 方法

  因?yàn)镚etSuppliersByCountry(country)方法有一個(gè)輸入?yún)?shù),所以向?qū)г俅物@示最后一屏,讓你選擇參數(shù)的值。這一次,設(shè)置參數(shù)源為Control,這時(shí)會(huì)出現(xiàn)一個(gè)ControlID下拉列表,列表中包含頁(yè)面上所有控件的名稱;從中選擇CountryName控件。由于第一次訪問(wèn)本頁(yè)面時(shí)文本框CountryName會(huì)為空白,那么就沒(méi)有值從它返回,也就不顯示任何數(shù)據(jù)。如果你希望默認(rèn)顯示一些結(jié)果,那么要在DefaultValue文本框里輸入一個(gè)默認(rèn)的參數(shù)值。

圖 8: 設(shè)置CountryName控件的值作為參數(shù)值

ObjectDataSource的聲明標(biāo)記跟我們的第一個(gè)例子會(huì)稍有不同。使用一個(gè) ControlParameter替代了標(biāo)準(zhǔn)的Parameter對(duì)象。ControlParameter具有一些額外的屬性用來(lái)指定Web控件的ID,還有用作參數(shù)的屬性值(PropertyName)。配置數(shù)據(jù)源向?qū)ё阋詭臀覀儧Q定,例如TextBox,我們很有可能會(huì)使用它的Text屬性作為參數(shù)值。然而,如果你需要使用Web控件的一個(gè)不同的屬性值,那么你需要在這里更改PropertyName屬性,或者從配置數(shù)據(jù)源向?qū)Ю稂c(diǎn)擊“高級(jí)屬性”。

asp:ObjectDataSource ID="ObjectDataSource2" runat="server"

 SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">

 SelectParameters>

  asp:ControlParameter ControlID="CountryName" Name="country" PropertyName="Text"

   Type="String" />

 /SelectParameters>

/asp:ObjectDataSource>

  當(dāng)?shù)谝淮卧L問(wèn)該頁(yè)面時(shí),文本框CountryName里的內(nèi)容是空白的。GridView控件仍然會(huì)調(diào)用ObjectDataSource的Select方法,但是,一個(gè)空值會(huì)被傳入GetSuppliersByCountry(country)方法。表適配器(TableAdapter)會(huì)將這個(gè)null值轉(zhuǎn)換成數(shù)據(jù)庫(kù)里的NULL值(DBNull.Value),然而GetSuppliersByCountry(country)方法所使用的查詢已經(jīng)寫明在傳入一個(gè)NULL值錯(cuò)位參數(shù)@CategoryID時(shí)將不會(huì)返回任何結(jié)果。簡(jiǎn)而言之,不會(huì)返回任何供應(yīng)商。

  一旦訪問(wèn)正輸入一個(gè)國(guó)家,然后點(diǎn)擊Show Suppliers按鈕觸發(fā)一次回傳(postback),ObjectDataSource的Select方法被請(qǐng)求,同時(shí)傳遞文本框的Text值作為country參數(shù)。

圖 9: 顯示出位于Canada的供應(yīng)商

默認(rèn)顯示所有供應(yīng)商

  相對(duì)于在第一次訪問(wèn)頁(yè)面時(shí)不顯示任何供應(yīng)商,我們也許會(huì)希望一開(kāi)始顯示所有的供應(yīng)商,并且允許用戶通過(guò)在文本框里輸入國(guó)家名稱來(lái)縮減列表。當(dāng)文本框空白時(shí),一個(gè)null值被傳遞到類SuppliersBLL的GetSuppliersByCountry(country)方法作為country輸入?yún)?shù)。這個(gè)null值繼續(xù)被傳遞到DAL層的GetSupplierByCountry(country)方法,在那里它會(huì)被轉(zhuǎn)換成數(shù)據(jù)庫(kù)里的NULL值用作下面這個(gè)查詢的@Country參數(shù):

SELECT  SupplierID, CompanyName, Address, City, Country, Phone

FROM   Suppliers

WHERE Country = @Country

表達(dá)式Country = NULL總是返回False,除非有某些記錄Country字段的值恰好為NULL,否則不返回任何數(shù)據(jù)。

  為了當(dāng)文本框空白時(shí)返回所有的供應(yīng)商,我們可以在BLL層的GetSuppliersByCountry(country)方法中加入:當(dāng)參數(shù)country為null值時(shí),調(diào)用GetSuppliers()方法而其他情況則調(diào)用DAL層的GetSuppliersByCountry(country)方法。這將實(shí)現(xiàn)以下的效果:當(dāng)不指定國(guó)家時(shí)返回所有的國(guó)家,而當(dāng)提供了country參數(shù)則返回適當(dāng)?shù)墓?yīng)商子集。

更改類SuppliersBLL的GetSuppliersByCountry(country)方法,如下:

public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)

{

 if (string.IsNullOrEmpty(country))

  return GetSuppliers();

 else

  return Adapter.GetSuppliersByCountry(country);

}

作了這個(gè)更改后,第一訪問(wèn)頁(yè)面DeclarativeParams.aspx (或者當(dāng)文本框CountryName空白時(shí))將顯示所有的供應(yīng)商。

圖 10: 現(xiàn)在,默認(rèn)顯示所有供應(yīng)商

總結(jié)

  為了使用帶輸入?yún)?shù)的方法,我們需要在ObjectDataSource的SelectParameters集合里指定參數(shù)的值。不同的參數(shù)類型允許從不同的參數(shù)源獲取它的值。默認(rèn)的參數(shù)類型使用一個(gè)硬編碼的值,但是也可以非常方便地,從querystiring,Session變量,cookies,或者用戶從頁(yè)面上的Web控件輸入的值獲取參數(shù),甚者不需要寫一行的代碼。

  這一章的教程了我們通過(guò)多個(gè)例子圖解了如何使用在數(shù)據(jù)源中使用參數(shù)。然而,有些時(shí)候我們可能需要使用不能為空的參數(shù),例如當(dāng)前日期和時(shí)間,或者,如果我們的站點(diǎn)使用了Membership時(shí)訪問(wèn)者的User ID 。這些情況我們可以通過(guò)編程預(yù)先設(shè)置ObjectDataSource調(diào)用的方法的參數(shù)值。在下一個(gè)章的教程里,我們將看看如何實(shí)現(xiàn)這一點(diǎn)。

祝編程快樂(lè)!

作者簡(jiǎn)介

Scott Mitchell,著有六本ASP/ASP.NET方面的書(shū),是4GuysFromRolla.com的創(chuàng)始人,自1998年以來(lái)一直應(yīng)用微軟Web技術(shù)。Scott是個(gè)獨(dú)立的技 術(shù)咨詢顧問(wèn),培訓(xùn)師,作家,最近完成了將由Sams出版社出版的新作,24小時(shí)內(nèi)精通ASP.NET 2.0。他的聯(lián)系電郵為mitchell@4guysfromrolla.com,也可以通過(guò)他的博客http://ScottOnWriting.NET與他聯(lián)系。

您可能感興趣的文章:
  • 在ASP.NET 2.0中操作數(shù)據(jù)之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
  • 在ASP.NET 2.0中操作數(shù)據(jù)之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三:創(chuàng)建母版頁(yè)和站點(diǎn)導(dǎo)航
  • 在ASP.NET 2.0中操作數(shù)據(jù)之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六:編程設(shè)置ObjectDataSource的參數(shù)值
  • ASP.NET 2.0中的數(shù)據(jù)操作之七:使用DropDownList過(guò)濾的主/從報(bào)表
  • ASP.NET 2.0中的數(shù)據(jù)操作之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
  • ASP.NET 2.0中的數(shù)據(jù)操作之九:跨頁(yè)面的主/從報(bào)表
  • 在ASP.NET 2.0中操作數(shù)據(jù)之十:使用 GridView和DetailView實(shí)現(xiàn)的主/從報(bào)表
  • [翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程

標(biāo)簽:重慶 本溪 吉林 河南 宜春 婁底 麗江 汕頭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章