已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ASP.NET 2.0中的數(shù)據(jù)操作:定制數(shù)據(jù)修改界面摘要: 本文主要介紹如何對(duì)GridView的編輯界面進(jìn)行定制,使GridView在編輯時(shí)具有DropDownList和RadioButtonList控件,提供更人性化的界面。 譯注:Scott Mitchell寫的46篇(現(xiàn)在發(fā)布了前15篇)ASP.NET2.0教程系列第20篇譯文,原文尚未發(fā)布,Word文檔可以在這里下載中英混排版本目錄簡(jiǎn)介一、重載UpdateProduct方法二、手工處理可編輯的GridView三、在編輯界面中使用DropDownList顯示Category和Supplier四、用RadioButton表示Discontinued狀態(tài)小結(jié)簡(jiǎn)介GridView和DetailsView控件通過(guò)綁定列和CheckBox列,可以簡(jiǎn)化數(shù)據(jù)編輯界面制作,呈現(xiàn)只讀,編輯和新增界面,我們不需要增加元素標(biāo)記或編寫任何額外代碼就可以得到這些界面。然而,綁定列和CheckBox列呈現(xiàn)的界面卻缺乏實(shí)際應(yīng)用中經(jīng)常用到的定制功能。為了對(duì)GridView和DetailsView的編輯、新增界面進(jìn)行定制,需要用模板列(TemplateField)替換原有列。 在上節(jié)教程中我們討論如何增加驗(yàn)證控件來(lái)定制數(shù)據(jù)編輯界面,而本節(jié)教程將演示如何使用Web控件對(duì)實(shí)際的數(shù)據(jù)集合進(jìn)行定制:將綁定列和CheckBox列中默認(rèn)的TextBox、CheckBox控件替換成其他的輸入控件。為此,我們將創(chuàng)建一個(gè)可編輯的GridView,并允許編輯更新產(chǎn)品的名字、類別、提供商和廢棄狀態(tài)等。而且編輯某行時(shí),類別category和提供商supplier我們將使用DropDownList來(lái)顯示,以供用戶進(jìn)行選擇。此外,還將CheckBox列中默認(rèn)的CheckBox控件替換成RadioButtonList控件,并提供2個(gè)單選選項(xiàng):Active和Discontinued。 如圖1:圖1:在GridView的編輯界面使用DropDownList和RadioButton控件 一、重載UpdateProduct方法本節(jié)教程我們將創(chuàng)建一個(gè)可編輯的GridView并允許編輯更新產(chǎn)品的名字、類別、提供商和廢棄狀態(tài)等。因此,我們要重載UpdateProduct方法,并接受5個(gè)輸入?yún)?shù):4個(gè)產(chǎn)品參數(shù)值加上一個(gè)產(chǎn)品ID。像以前那樣,本重載將:1. 根據(jù)指定的ProductID從數(shù)據(jù)庫(kù)中獲取產(chǎn)品信息; 2. 更新ProductName,categoryID,supplierID和Discontinued字段; 3. 通過(guò)TableAdapter的Update()方法向數(shù)據(jù)訪問(wèn)層DAL發(fā)出更新請(qǐng)求。簡(jiǎn)單起見,這個(gè)重載方法省略了一個(gè)重要的業(yè)務(wù)邏輯檢查并確保一個(gè)將會(huì)標(biāo)記為discontinued的產(chǎn)品不是它的提供商提供的唯一產(chǎn)品。你愿意的話也可以加進(jìn)來(lái),或者做的更完善一些,將這個(gè)邏輯寫到一個(gè)獨(dú)立的方法中。下面的代碼是我們?cè)赑roductsBLL類中新增的UpdateProduct重載方法:System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, false)public bool UpdateProduct(string productName, int? categoryID, int? supplierID, bool discontinued, int productID) Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID); if (products.Count = 0) / 如果沒有匹配記錄,返回false return false; Northwind.ProductsRow product = products0; product.ProductName = productName; if (supplierID = null) product.SetSupplierIDNull(); else product.SupplierID = supplierID.Value; if (categoryID = null) product.SetCategoryIDNull(); else product.CategoryID = categoryID.Value; product.Discontinued = discontinued; / 更新產(chǎn)品記錄 int rowsAffected = Adapter.Update(product); / 成功更新后返回true,否則返回false return rowsAffected = 1;二、手工處理可編輯的GridView編寫完UpdateProduct重載方法,下面要做的是創(chuàng)建可編輯的GridView:在設(shè)計(jì)器窗口中打開EditInsertDelete 文件夾中的CustomizedUI.aspx頁(yè),為其增加一個(gè)GridView控件;接著通過(guò)GridView的智能標(biāo)記創(chuàng)建一個(gè)新的ObjectDataSource,配置這個(gè)ObjectDataSource使用ProductBLL類的GetProducts()方法來(lái)獲取產(chǎn)品信息,并讓其使用上面創(chuàng)建的UpdateProduct重載方法來(lái)進(jìn)行產(chǎn)品的更新。在新增和刪除標(biāo)簽上,從下拉列表中選擇(None)。圖2:配置ObjectDataSource使用上面創(chuàng)建的UpdateProduct重載方法 像data modification教程中那樣,Visual Studio創(chuàng)建了ObjectDataSource的元素標(biāo)記并指定OldValuesParameterFormatString屬性為original_0。由于我們編寫的方法不支持傳入的原始的ProductID值,所以業(yè)務(wù)邏輯層不會(huì)生效。因此,像上節(jié)教程中那樣,我們需要從元素標(biāo)記中移除這些屬性,或者設(shè)置這些屬性。改動(dòng)后的ObjectDataSource元素標(biāo)記將如下所示: 注意上面代碼中OldValuesParameterFormatString已經(jīng)被移除,并且在UpdateParameters集合中為UpdateProduct重載方法的每個(gè)入口參數(shù)提供了一個(gè)Parameter。雖然ObjectDataSource被配置為只對(duì)產(chǎn)品的部分信息進(jìn)行更新,而GridView卻顯示了所有的產(chǎn)品信息。我們需要按照下面幾點(diǎn)來(lái)調(diào)整GridView: 1. 只包括ProductName, SupplierName, CategoryName字段的綁定列和Discontinued字段的CheckBox列。 2. CategoryName 和 SupplierName字段在Discontinued前面顯示(左邊) 3. 將CategoryName 和 SupplierName的標(biāo)題分別改為“Category” 和 “Supplier” 4. 啟用編輯模式(在GridView的智能標(biāo)記中選擇啟用編輯復(fù)選框)這些調(diào)整之后,設(shè)計(jì)器中的頁(yè)面將如圖3所示:圖3:移除GridView中無(wú)用的字段GridView的元素標(biāo)記也像下面所示: 這時(shí)GridView的只讀界面就改好了。查看數(shù)據(jù)時(shí),每種產(chǎn)品就作為GridView中的一行,并顯示產(chǎn)品的name,category,supplier和discontinued狀態(tài)。圖4: GridView調(diào)整后的只讀界面三、在編輯界面中使用DropDownList顯示Category和Supplier我們注意到ProductsRow對(duì)象包含產(chǎn)品的CategoryID,CategoryName,SupplierID和SupplierName屬性,但是Products數(shù)據(jù)庫(kù)只保存了外鍵,而對(duì)應(yīng)的Name保存在Categories和Suppliers表中。ProductsRow對(duì)象中的CategoryID和SupplierID可以讀取和寫入,而CategoryName和SupplierName屬性則標(biāo)記為只讀。由于CategoryName和SupplierName的只讀狀態(tài),相應(yīng)綁定列的ReadOnly屬性也被置為true,防止編輯某行時(shí)它們的值被修改。盡管也可以通過(guò)設(shè)置ReadOnly屬性為false,使其在編輯狀態(tài)將這些綁定列轉(zhuǎn)為TextBox,但是這樣以來(lái)當(dāng)用戶嘗試更新產(chǎn)品信息時(shí)系統(tǒng)就會(huì)拋出異常,因?yàn)閁pateProduct重載中并不接受CategoryName和SupplierName參數(shù)。事實(shí)上,我們也不想編寫這種重載方法,原因如下: 1. Products表沒有SupplierName和CategoryName字段,而是對(duì)應(yīng)的外鍵SupplierID和CategoryID。因此,我們希望在更新方法中傳遞外鍵ID,而不是查找外鍵表中的值。 2. 要求用戶鍵入supplier或者category的名字也很不合理,因?yàn)檫@要求用戶必須知道合法的category和supplier,并且拼寫正確無(wú)誤。我們打算在只讀模式Supplier和category列分別顯示了分類和提供商的名字,而在編輯時(shí),通過(guò)下拉列表顯示可用選項(xiàng)。這樣以來(lái),用戶可以快速查看有效的category和supplier并且可以很便捷直觀的進(jìn)行選擇。要實(shí)現(xiàn)這一點(diǎn),需要將SupplierName和CategoryName對(duì)應(yīng)的綁定列轉(zhuǎn)換為模板列,在ItemTemplate模板中顯示SupplierName和CategoryName,而EidtItemTemplate模板則使用DropDownList控件列出有效的cagegory和supplier。添加Categories和Suppliers 的DropDownList控件我們要先將SupplierName和CategoryName綁定列轉(zhuǎn)換為模板列:點(diǎn)擊GridView智能標(biāo)記中的編輯列鏈接;選擇左下的BoundField;點(diǎn)擊“將此字段轉(zhuǎn)換為TemplateField”鏈接,轉(zhuǎn)換過(guò)程將創(chuàng)建一個(gè)模板列,包括ItemTemplate和EditItemTemplate,最終的元素標(biāo)記大致如下: asp:Label ID=Label1 runat=server Text= asp:Label ID=Label1 runat=server Text= 由于綁定列標(biāo)記為只讀,ItemTemplate和EditItemTemplate都將用Label控件的Text屬性綁定顯示相關(guān)數(shù)據(jù)(如上面的CategoryName)。因此需要修改EditItemTemplate模板,用DropDownList控件來(lái)替換原來(lái)的Label控件。像上節(jié)教程講的,即可在設(shè)計(jì)器中編輯模板也可直接修改模板的元素標(biāo)記。要在設(shè)計(jì)器中修改,可以通過(guò)GridView的智能標(biāo)記點(diǎn)擊“編輯模板”鏈接并選擇Category字段的EditItemTemplate模板。刪除Label控件用DropDownList控件代替,并設(shè)置DropDownList的ID屬性為Categories。 圖5:刪除EditItemTemplate模板中的TextBox并增加一個(gè)DropDownList下一步我們需要為DropDownList綁定category。從智能標(biāo)記中點(diǎn)擊“選擇數(shù)據(jù)源”鏈接并選擇創(chuàng)建一個(gè)新的ObjectDataSource,命名為CategoriesDataSource。圖6:創(chuàng)建一個(gè)新的ObjectDataSource控件CategoriesDataSource為了使ObjectDataSource顯示所有的category,我們將它與CategoriesBLL類的GetCategories()方法進(jìn)行綁定。圖7:將ObjectDataSource控件用GategoriesBLL的GetCategories()方法進(jìn)行綁定最后,配置DropDownList,用CategoryName字段作為顯示字段而CategoryID作為Value字段。圖8:用CategoryName作為顯示字段并用CategoryID作為Value字段改動(dòng)后CategoryName的模板項(xiàng)將擁有一個(gè)DropDownList控件和一個(gè)ObjectDataSource,元素標(biāo)記大致如下: asp:Label ID=Label1 runat=server Text= 注意:EditItemTemplate模板中的DropDownList必須啟用視圖狀態(tài)(view state)。下面我們將會(huì)在DropDownList的元素標(biāo)記中增加數(shù)據(jù)綁定語(yǔ)法和數(shù)據(jù)綁定命令例如Eval()和Bind(),它們要求啟用視圖狀態(tài),否則將無(wú)法顯示。 重復(fù)以上步驟為SupplierName的模板列中EditItemTemplate模板添加DropDownList控件,并命名為Suppliers。包括增加DropDownList控件和創(chuàng)建另一個(gè)ObjectDataSource,注意新的ObjectDataSource調(diào)用的是SuppliersBLL 類的 GetSuppliers()方法。另外,配置Suppliers下拉框的顯示字段為CompanyName,value字段為SupplierID。兩個(gè)下拉框都增加完成后,在瀏覽器中查看頁(yè)面并點(diǎn)擊“Chef Antons Cajun Seasoning”產(chǎn)品的編輯按鈕。如圖9所示,產(chǎn)品的category和supplier列都變成了下拉框并包含了對(duì)應(yīng)的category和supplier選項(xiàng)集。但是,你會(huì)發(fā)現(xiàn)下拉框中默認(rèn)選擇的是下拉框的第一項(xiàng)(category是Beverages,supplier是Exotic Liquids),事實(shí)上它們分別應(yīng)該是Condiment和New Orleans Cajun Delights。圖9:下拉列表默認(rèn)選中的是第一項(xiàng)此外,如果點(diǎn)擊更新,你會(huì)發(fā)現(xiàn)該產(chǎn)品的CategoryID 和 SupplierID都變成了NULL。這些都是由于EditItemTemplate模板中的下拉框沒有根據(jù)數(shù)據(jù)庫(kù)中的實(shí)際數(shù)據(jù)進(jìn)行綁定。為DropDownList綁定CategoryID 和 SupplierID 數(shù)據(jù)為了使product編輯狀態(tài)下的category和supplier下拉列表選中實(shí)際數(shù)據(jù),并使其可以根據(jù)用戶選擇調(diào)用BLL的UpdateProduct方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新,我們需要對(duì)兩個(gè)下拉框的SelectedValue分別綁定到CategoryID 和 SupplierID。例如對(duì)于Categories下拉框,我們直接在元素標(biāo)記中增加SelectedValue=。另一種做法是在設(shè)計(jì)器中,通過(guò)下拉框的智能標(biāo)記,點(diǎn)擊“編輯DataBinding”鏈接,設(shè)置編輯模板中的下拉框的數(shù)據(jù)綁定。接下來(lái),用雙重模式指定SelectedValue綁定到CategoryID字段(見圖10)。重復(fù)上面的方法之一,為Suppliers下拉框綁定SupplierID數(shù)據(jù)。圖10:給DropDownList的SelectedValue屬性綁定CategoryID值一旦完成兩個(gè)下拉框SelectedValue屬性的數(shù)據(jù)綁定,產(chǎn)品的category和supplier就會(huì)默認(rèn)選中實(shí)際選項(xiàng)了。在點(diǎn)擊Update按鈕時(shí),下拉框中的選擇也會(huì)準(zhǔn)確傳遞給UpdateProduct方法。圖11顯示了增加數(shù)據(jù)綁定后的代碼;注意如何選中下拉列表中的項(xiàng):Chef Antons Cajun Seasoning產(chǎn)品的分類和提供商分別選中了正確的Condiment和New Orleans Cajun Delights選項(xiàng)。圖11:修改后Categroy和Supplier正確選中了Product的實(shí)際數(shù)據(jù)處理NULL值Product表中的CategoryID 和 SupplierID列允許為NULL,而編輯模板中的下拉列表卻沒有NULL這一項(xiàng)。所以目前存在下面兩種問(wèn)題: 1. 用戶無(wú)法則現(xiàn)在的界面中將某個(gè)product非空的category或supplier設(shè)置為NULL 2. 如果產(chǎn)品的CategoryID 或 SupplierID為NULL,在點(diǎn)擊Edit按鈕時(shí)程序會(huì)拋出異常。這是因?yàn)锽ind()表達(dá)式中CategoryID(或SupplierID)返回NULL值時(shí),SelectedValue無(wú)法找到NULL這一列表項(xiàng)因而拋出異常。為了支持CategoryID 和 SupplierID的NULL值,需要為兩個(gè)DropDownList增加一個(gè)NULL值選項(xiàng)。在Master/Detail Filtering With a DropDownList教程中,我們演示了為綁定的DropDownList增加列表項(xiàng),方法是將DropDownList的AppendDataBoundItems屬性設(shè)置為true并手動(dòng)增加一個(gè)值為-1的列表項(xiàng)。在ASP.NET的數(shù)據(jù)綁定邏輯中,空字符串將自動(dòng)轉(zhuǎn)換為NULL,NULL值也可以轉(zhuǎn)為空字符串。因此,本節(jié)教程我們將增加一個(gè)值為空字符串的列表項(xiàng)。先將這兩個(gè)DropDownList的AppendDataBoundItems屬性設(shè)置為true。接著,用元素來(lái)增加一個(gè)NULL列表項(xiàng),元素標(biāo)記大致如下:asp:DropDownList ID=Categories runat=server DataSourceID=CategoriesDataSource DataTextField=CategoryName DataValueField=CategoryID SelectedValue= AppendDataBoundItems=True (None)我們選擇了使用“(None)”作為列表項(xiàng)的文本顯示(Text),你也可以空字符串或別的字符。注意:Master/Detail Filtering With a DropDownList教程演示過(guò)DropDownList列表項(xiàng)的增加方法在設(shè)計(jì)器中點(diǎn)擊DropDownList的屬性窗口(F4)中的Item屬性(將顯示ListItem集合編輯器)。這次我們采用直接在元素標(biāo)記中增加NULL列表項(xiàng)。如果你使用集合編輯器,創(chuàng)建出的元素標(biāo)記將忽略空字符的Value,如:(None)??雌饋?lái)并無(wú)大礙,可是DropDownList對(duì)沒有Value的項(xiàng)則使用Text來(lái)代替,這樣以來(lái)選擇“None”時(shí),“None”則被賦予CategoryID,系統(tǒng)將產(chǎn)生異常。通過(guò)顯式設(shè)置Value=,選擇此項(xiàng),CategoryID 就被更新為NULL值了。重復(fù)以上步驟設(shè)置Supplier的下拉框控件。通過(guò)這一附加的列表項(xiàng),編輯界面就可以為Product的CategoryID 和 SupplierID設(shè)定NULL值了,見圖12圖12:通過(guò)選擇(None)為產(chǎn)品的Category或Supplier指定NULL值。四、用RadioButton表示Discontinued狀態(tài)Product的Discontinued字段以CheckBox列呈現(xiàn),只讀模式是disabled的,只有編輯模式下才被enable。根據(jù)配套需要,我們可以使用模板列對(duì)其進(jìn)行定制。本節(jié)教程中,我們將使用含有RadioButtonList控件的模板列代替原來(lái)的CheckBox列,并帶有兩個(gè)選項(xiàng)“Active” 和 “Discontinued” 讓用戶選擇product的Discontinued值。先將Discontinued的CheckBox列轉(zhuǎn)為模板列,會(huì)用到ItemTemplate 和 EditItemTemplate兩個(gè)模板。它們使用CheckBox并將通過(guò)Checked屬性綁定Discontinued字段,唯一的區(qū)別在于ItemTemplate模板中的CheckBox的Enabled屬性是false。使用RadioButtonList控件替換掉原來(lái)ItemTemplate 和 EditItemTemplate模板中的CheckBox控件,并將它們的ID屬性都設(shè)置為DiscontinuedChoice。然后,設(shè)置RadioButtonLists的兩個(gè)單選按鈕項(xiàng),一個(gè)為“Active”標(biāo)簽,值為“False”,另一個(gè)為“Discontinued”標(biāo)簽,值為“True”。這些操作即可直接在元素標(biāo)記中添加元素,也可通過(guò)設(shè)計(jì)器中ListItem集合編輯器處理。圖13演示了指定兩個(gè)單選按鈕后的ListItem集合編輯器。圖13:為RadioButtonList增加Active和Discontinued選項(xiàng)由于普通項(xiàng)模板ItemTemplate中的RadioButtonList不應(yīng)是編輯狀態(tài),所以設(shè)置Enabled屬性為false,而編輯狀態(tài)對(duì)應(yīng)的EditItemTemplate模板中RadioButtonList
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)冷沖壓數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)T形把手?jǐn)?shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)雜醇油市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)醫(yī)用腳輪市場(chǎng)調(diào)查研究報(bào)告
- 2025至2031年中國(guó)砂輪修整機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 少子化背景下南昌市中心城區(qū)義務(wù)教育設(shè)施配置優(yōu)化研究
- 新能源汽車企業(yè)經(jīng)營(yíng)績(jī)效評(píng)價(jià)研究
- 二零二四年度中小企業(yè)適用勞動(dòng)合同法免除條件協(xié)議書3篇
- 二零二五年度水利工程鋼管腳手架搭設(shè)及質(zhì)量保障合同4篇
- 個(gè)人交易知識(shí)產(chǎn)權(quán)許可使用合同(2024版)3篇
- 完整版秸稈炭化成型綜合利用項(xiàng)目可行性研究報(bào)告
- 油氣行業(yè)人才需求預(yù)測(cè)-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- 2025年河北省單招語(yǔ)文模擬測(cè)試二(原卷版)
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評(píng)定規(guī)程
- 2024年內(nèi)蒙古中考英語(yǔ)試卷五套合卷附答案
- 2024年電工(高級(jí))證考試題庫(kù)及答案
- 2024年全國(guó)各地中考試題分類匯編:古詩(shī)詞閱讀
- 農(nóng)產(chǎn)品質(zhì)量評(píng)估與分級(jí)
- 華為集團(tuán)干部管理
評(píng)論
0/150
提交評(píng)論