版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、導(dǎo)言在前面的指南中我們研究了如何顯示一個簡單的主/從報表,該報表使用DropDownList和GridView控件,DropDownList填充類別,GridView顯示選定類別的產(chǎn)品.這類報表用于顯示具有一對多關(guān)系的記錄時非常合適,同時它也可以很容易的被擴展以顯示多個一對多關(guān)系的數(shù)據(jù).比如,一個訂單系統(tǒng)應(yīng)該包含表示客戶,訂單和訂單明細(xì)的表.一個客戶也許有多個訂單,每個訂單又包含多條訂單項.這樣的數(shù)據(jù)可以使用兩個DropDownList和一個GridView呈現(xiàn)給用戶.第一個DropDownList應(yīng)該包含數(shù)據(jù)庫中所有客戶的列表,第二個DropDownList的內(nèi)容是選定客戶的訂單.GridV
2、iew用于列出所選定訂單的訂單明細(xì)項.Step1:創(chuàng)建DropDownList并使用類別數(shù)據(jù)填充我們的第一個目標(biāo)是添加一個能夠列出類別的DropDownList.這些步驟在前面的指南中已經(jīng)做詳細(xì)的分析,但為了保持本篇指南的完整性有必要在這里簡單概括一下.打開Filtering文件夾中的MasterDetailsDetails.aspx,在頁面上添加一個DropDownList,設(shè)置它的ID為Categories,然后單擊智能標(biāo)記上的ConfigureDataSource鏈接.在數(shù)據(jù)源配置向?qū)е羞x擇新增一個數(shù)據(jù)源.圖1:為DropDownList增加一個新的數(shù)據(jù)源1當(dāng)然,新的數(shù)據(jù)源應(yīng)該是Obje
3、ctDataSource.把新的ObjectDataSource命名為CategoriesDataSource并且讓他調(diào)用CategoriesBLL對象的GetCategories()方法圖2:選擇使用CategoriesBLL類圖3:配置ObjectDataSource使用GetCategories()方法2配置完ObjectDataSource后還需要指定要在DropDownList中顯示的數(shù)據(jù)字段,以及作為數(shù)據(jù)項的值(valueforthelistitem)的數(shù)據(jù)字段.我們指定CategoryName為要顯示的列,指定CategoryID為數(shù)據(jù)項的值字段圖4:指定DropDownList
4、顯示CategoryName列并且使用CategoryID列作為數(shù)據(jù)項的值這時,我們就有了一個使用Categories表中的記錄來填充的DropDownList控件.當(dāng)用戶在DropDownList中選擇一個新的類別時,我們需要一次回發(fā),這樣可以刷新在第二步中我們要創(chuàng)建的產(chǎn)品DropDownList控件.所以,categoriesDropDownList的智能標(biāo)記上選中AutoPostBack選項.3圖5:選中CategoriesDropDownList的AutoPostBackStep2:在第二個DropDownList中顯示選中類別的產(chǎn)品CategoriesDropDownList完成后,
5、下一步就需要一個顯示屬于選定類別的產(chǎn)品的DropDownList了.要完成這個功能,再增加一個DropDownList控件并命名為ProductsByCategory.與CategoriesDropDownList一樣,為ProductsByCategoryDropDownList創(chuàng)建一個新的ObjectDataSource并命名為ProductsByCategoryDataSource.4圖6:為ProductsByCategoryDropDownList添加新數(shù)據(jù)源圖7:創(chuàng)建一個新的ObjectDataSource并命名為ProductsByCategoryDataSource由于Prod
6、uctsByCategoryDropDownList需要顯示屬于選定類別的產(chǎn)品,讓)ObjectDataSource調(diào)用ProductsBLL對象的GetProductsByCategoryID(categoryID方法.5圖8:選擇使用ProductsBLL類圖9:配置ObjectDataSource使用GetProductsByCategoryID(categoryID)方法在向?qū)У淖詈笠徊叫枰付╟ategoryID的值.我們把CategoriesDropDownList的已選擇的數(shù)據(jù)項項作為該參數(shù)值.6圖10:使用categoryID參數(shù)從CategoriesDropDownList接
7、收值ObjectDataSource配置完成后,剩下的就是指定DropDownList要顯示的字段和作為值的字段了.設(shè)置為顯示ProductName并把ProductID做為值字段圖11:指定DropDownList數(shù)據(jù)項的文本和值使用的數(shù)據(jù)源字段7ObjectDataSource和ProductsByCategoryDropDownList配置完成后頁面上會有兩個DropDownList:第一個列出所有的類別,第二個列出屬于選定類別的產(chǎn)品.當(dāng)用戶在第一個DropDownList上選擇了一個新的類別后,將會發(fā)生一次回發(fā)(postback),第二個DropDownList將會重新綁定以顯示屬于新
8、選定類別的產(chǎn)品.圖12和圖13顯示了在瀏覽器中看到的MasterDetailsDetails.aspx頁面.圖12:第一次訪問頁面時Beverages類別是選中的.8圖13:選擇一個不同的類別時顯示該類別的產(chǎn)品9圖14:激活productsByCategoryDropDownList的AutoPostBack屬性Step3:使用DetailsView顯示選中產(chǎn)品的詳細(xì)信息最后一個步驟是在DetailsView中顯示選中產(chǎn)品的詳細(xì)信息.要完成該功能,添加一個DetailsView到頁面上,設(shè)置它的ID屬性為ProductDetails,給它創(chuàng)建一個新的ObjectDataSource.配置Obj
9、ectDataSource使它通過ProductsBLL類的GetProductByProductID(productID)方法填充數(shù)據(jù),使用ProductsByCategoryDropDownList的已選擇項的值作為productID參數(shù)的值.10圖15:選擇使用ProductsBLL類圖16:配置ObjectDataSource使用GetProductByProductID(productID)方法11圖17:使用ProductsByCategoryDropDownList的值作為productID參數(shù)的值你可以選擇在DetailsView顯示的任何有效的字段.我決定不顯示Product
10、ID,SupplierID,和CategoryID字段并且對其余的字段重新排序及格式化.另外,我去掉了DetailsView的Height和Width屬性設(shè)置,允許DetailsView可以擴展到需要的寬度,這樣比把它限制在指定的大小會更好的顯示數(shù)據(jù).下面便是全部的標(biāo)記性語言(markup)12花點時間在瀏覽器中測試一下MasterDetailsDetails.aspx頁面.乍一看好像一切如預(yù)計的那樣順利,但是卻有一個小問題.當(dāng)你選擇了一個新類別,ProductsByCategoryDropDownList會更新顯示選中類別的產(chǎn)品,但是ProductDetailsDetailsView還是顯示
11、上一個產(chǎn)品的信息.當(dāng)選擇了一個選中類別的不同的產(chǎn)品時DetailsView應(yīng)該被更新.此外,如果你的測試足夠徹底,你將會發(fā)現(xiàn)如果你不斷的選擇新類別(比如在CategoriesDropDownList中選擇Beverages,然后選擇Condiments,然后是Confections)每個類別的選擇都會使ProductDetailsDetailsView被刷新.為了讓這個問題更具體一些,讓我們看一個例子.當(dāng)你第一次訪問該頁面時,Beverages類別是選中的并且與之相關(guān)的產(chǎn)品在ProductsByCategoryDropDownList中列出.Chai是當(dāng)前選中的產(chǎn)品,他的詳細(xì)信息顯示在Prod
12、uctDetailsDetailsView中,如圖18.13圖18:DetailsView顯示了選中產(chǎn)品的詳細(xì)信息如果你把類別選項Beverages改成Condiments,便會發(fā)生一次回發(fā),ProductsByCategoryDropDownList會相應(yīng)的更新,但是DetailsView仍然會顯示Chai的詳細(xì)信息.14圖19:上一次選擇產(chǎn)品的詳細(xì)信息仍然在顯示在列表中選擇一個產(chǎn)品會如預(yù)期地一樣刷新DetailsView,如果你改變了產(chǎn)品之后選擇了一個新的類別,DetailsView又一次沒有刷新.然后如果你選擇一個新類別而不是選擇一個產(chǎn)品,DetailsView則會刷新.究竟是怎么回事呢
13、?這個問題是由頁面生命周期的時間調(diào)度引發(fā)的.當(dāng)頁面被請求時會經(jīng)過一系列的處理后呈現(xiàn)出來.這其中的一項處理便是ObjectDataSource控件檢查他的SelectParameters值是否發(fā)生變化.如果發(fā)生了變化,WEB控件綁定到ObjectDataSource的數(shù)據(jù)便會刷新顯示.比如,當(dāng)一個新類別被選中時,ProductsByCategoryDataSourceObjectDataSource發(fā)現(xiàn)它的參數(shù)值已經(jīng)發(fā)生了變化,然后ProductsByCategoryDropDownList就會重新綁定,獲取所選中類別的產(chǎn)品.在這種情況下發(fā)生的該問題是由于在頁面的生命周期中ObjectDataS
14、ources檢查參數(shù)是否發(fā)生改變的動作是在關(guān)聯(lián)的WEB控件重新綁定之前.因此,當(dāng)選擇了一個新的類別ProductsByCategoryDataSourceObjectDataSource會檢查到它的參數(shù)值發(fā)生了變化.但是,ProductDetailsDetailsView使用的ObjectDataSource并沒有發(fā)生任何變化,因為ProductsByCategoryDropDownList還沒有重新綁定.在稍后的生命周期中ProductsByCategoryDropDownList重新綁定到它的ObjectDataSource,獲取剛剛選中類別的產(chǎn)品.當(dāng)ProductsByCategoryD
15、ropDownList的值發(fā)生變化的時候ProductDetailsDetailsView的ObjectDataSource已經(jīng)完成了它的參數(shù)值檢查工作.因此,DetailsView還是顯示先前的數(shù)據(jù).圖20描述了這個交互的過程.圖20:TProductDetailsDetailsView的ObjectDataSource的檢查工作結(jié)束后ProductsByCategoryDropDownList的值才改變.15要解決這個問題,我們需要在ProductsByCategoryDropDownList綁定后顯式的重新綁定ProductDetailsDetailsView.我們可以在Products
16、ByCategoryDropDownList的DataBound事件中調(diào)用ProductDetailsDetailsView的DataBind()方法.把下面的事件處理代碼添加到MasterDetailsDetails.aspx頁面的代碼后置類:protectedvoidProductsByCategory_DataBound(objectsender,EventArgse)ProductDetails.DataBind();添加對ProductDetailsDetailsView的DataBind()方法的顯式調(diào)用后,就一切正常了.圖21高亮顯示了該方法是如何解決這個問題的.圖21:在ProductsByCategoryDropDownList的DataBound事件中ProductDetailsDetailsView被顯示的刷新.DropDownList控件是一個非常理想的用于主/從報
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 對企業(yè)有利的加班合同(2篇)
- 二零二五年智能家電技術(shù)服務(wù)合同范本3篇
- 宜賓酒王二零二五年度800億控量保價市場占有率提升合同2篇
- 二零二五年度酒店會議住宿套餐定制合同2篇
- 2025年度電子信息產(chǎn)業(yè)設(shè)備采購與技術(shù)服務(wù)合同3篇
- 二零二五版工程款分期支付還款協(xié)議合同范本3篇
- 二零二五版碧桂園集團施工合同示范文本6篇
- 二零二五版豆腐出口貿(mào)易代理合同3篇
- 二零二五年度韻達快遞業(yè)務(wù)承包合同及綜合運營支持協(xié)議3篇
- 2024年物流運輸承包合同3篇
- 《文化苦旅》讀書分享 PPT
- 氧化鋁生產(chǎn)工藝教學(xué)拜耳法
- 2023年十八項醫(yī)療核心制度考試題與答案
- 氣管切開患者氣道濕化的護理進展資料 氣管切開患者氣道濕化
- 管理模板:某跨境電商企業(yè)組織結(jié)構(gòu)及部門職責(zé)
- 底架總組裝工藝指導(dǎo)書
- 簡單臨時工勞動合同模板(3篇)
- 聚酯合成反應(yīng)動力學(xué)
- 自動控制原理全套課件
- 上海科技大學(xué),面試
- 《五年級奧數(shù)總復(fù)習(xí)》精編課件
評論
0/150
提交評論