《asp數(shù)據(jù)綁定》PPT課件.ppt_第1頁(yè)
《asp數(shù)據(jù)綁定》PPT課件.ppt_第2頁(yè)
《asp數(shù)據(jù)綁定》PPT課件.ppt_第3頁(yè)
《asp數(shù)據(jù)綁定》PPT課件.ppt_第4頁(yè)
《asp數(shù)據(jù)綁定》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章數(shù)據(jù)綁定技術(shù)原理,北京理工大學(xué)計(jì)算機(jī)學(xué)院金旭亮,ASP.NET程序設(shè)計(jì)教程,主要內(nèi)容,10.1數(shù)據(jù)綁定原理10.2GridView基礎(chǔ)知識(shí)10.3GridView應(yīng)用實(shí)例10.4數(shù)據(jù)綁定控件的組合使用,2,10.1數(shù)據(jù)綁定原理,只有知其所以然才能知其然,引例:直觀(guān)了解數(shù)據(jù)綁定,現(xiàn)場(chǎng)編程展示(參考示例:UseDataBind),4,數(shù)據(jù)綁定的層次結(jié)構(gòu),5,數(shù)據(jù)庫(kù),ADO.NET,數(shù)據(jù)綁定控件,數(shù)據(jù)源控件,提供顯示和編輯數(shù)據(jù)的可視化界面,IDataSource,DataSourceView,提供對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)接口:增、刪、改、查,與數(shù)據(jù)庫(kù)交互,完成信息的增、刪、改、查工作。,信息的存放地,調(diào)用,存取,常用的數(shù)據(jù)綁定控件,6,常用的數(shù)據(jù)源控件,7,多種可綁定的數(shù)據(jù)對(duì)象,除了綁定到數(shù)據(jù)源這種具有很強(qiáng)功能的對(duì)象之外,數(shù)據(jù)綁定控件還可以綁定到最小實(shí)現(xiàn)了IEnumerable接口的集合對(duì)象(如數(shù)組/HashTable/List)。另外,通過(guò)使用數(shù)據(jù)綁定表達(dá)式,可以將一些數(shù)據(jù)綁定控件直接與某個(gè)函數(shù)或?qū)傩赃M(jìn)行綁定。,8,數(shù)據(jù)綁定的三種實(shí)現(xiàn)方式:,將數(shù)據(jù)綁定控件的DataSourceID設(shè)定為數(shù)據(jù)源控件,數(shù)據(jù)綁定控件即可充分利用數(shù)據(jù)源控件的功能實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查。這稱(chēng)為“自動(dòng)數(shù)據(jù)綁定”。也可以不使用DataSourceID,而是直接將數(shù)據(jù)源賦值給數(shù)據(jù)綁定控件的DataSource屬性,然后再調(diào)用數(shù)據(jù)綁定控件的DataBind()方法實(shí)現(xiàn)“手工數(shù)據(jù)綁定”?;蛘咧苯釉陧?yè)面中放置綁定表達(dá)式,然后在Page_Load中調(diào)用頁(yè)面類(lèi)的DataBind()方法實(shí)現(xiàn)數(shù)據(jù)綁定。,9,數(shù)據(jù)綁定表達(dá)式,第一步:設(shè)定數(shù)據(jù)表達(dá)式第二步:執(zhí)行Page類(lèi)中的Bind()方法。Demo:UseDataBind(DataBindingExpression.aspx),10,重要編程提示:直接在頁(yè)面中嵌入C#代碼的方法:無(wú)須調(diào)用Page.Bind()方法,上述代碼總是執(zhí)行。,理解“數(shù)據(jù)綁定模板”,由于要顯示的數(shù)據(jù)通常包含多條結(jié)構(gòu)類(lèi)似的記錄,因此,經(jīng)常使用“模板(Template)”來(lái)指定單條記錄的顯示格式,然后,數(shù)據(jù)綁定控件自動(dòng)將這一定義好的模板應(yīng)用于所有要顯示的記錄??梢葬槍?duì)不同的場(chǎng)景定義不同的模板,例如,可為瀏覽狀態(tài)顯示一個(gè)只讀的模板(通常用Label來(lái)表達(dá)信息),然后為編輯狀態(tài)顯示另一個(gè)模板(通常用TextBox來(lái)向用戶(hù)提供修改信息的手段)。大多數(shù)數(shù)據(jù)綁定控件都提供了相應(yīng)的方法在不同的狀態(tài)間切換(如從瀏覽切換到編輯狀態(tài)),并會(huì)自動(dòng)加載相應(yīng)的模板,與此同時(shí),還會(huì)觸發(fā)相應(yīng)的事件。,11,在數(shù)據(jù)綁定模板中綁定數(shù)據(jù)(1),當(dāng)一個(gè)ASP.NET控件位于一個(gè)數(shù)據(jù)綁定模板中時(shí),可以使用Eval()方法將其的某個(gè)屬性與數(shù)據(jù)源中當(dāng)前數(shù)據(jù)對(duì)象的某個(gè)屬性相綁定。,12,ClientID:/,Eval方法提供了一個(gè)單向的只讀的數(shù)據(jù)值。這就是說(shuō),數(shù)據(jù)是從“數(shù)據(jù)源”對(duì)象單向傳送給模板中的控件,沒(méi)有辦法修改數(shù)據(jù)源對(duì)象中的數(shù)據(jù)。,在數(shù)據(jù)綁定模板中綁定數(shù)據(jù)(2),當(dāng)需要修改數(shù)據(jù)源中的數(shù)據(jù)時(shí),通常采用Bind()方法實(shí)現(xiàn)這一功能:,13,ClientName:/,當(dāng)使用Bind方法時(shí),用戶(hù)所做的修改會(huì)被傳送回?cái)?shù)據(jù)源控件以實(shí)現(xiàn)更新。,數(shù)據(jù)綁定實(shí)例分析,Demo:UseDataBind(UseEvalAndBind.aspx),14,示例要點(diǎn):使用FormView控件綁定到SQLDataSource,定義其編輯和插入模板。,自動(dòng)綁定VS手工綁定,ASP.NET提供的自動(dòng)數(shù)據(jù)綁定機(jī)制雖然很自動(dòng)化,幾乎不用編碼就可以完成許多功能,然而,在實(shí)際項(xiàng)目中為了實(shí)現(xiàn)嚴(yán)格的分層架構(gòu)和保證程序的靈活性與可控性,往往不使用自動(dòng)綁定,而是手工編程實(shí)現(xiàn)數(shù)據(jù)綁定。下面將以最復(fù)雜也是最常用的GridView為例,深入介紹數(shù)據(jù)綁定控件的使用方法。,15,10.2GridView基礎(chǔ)知識(shí),以點(diǎn)帶面,舉一反三,形成GridView的全局觀(guān)(1),GridView以表格的方式顯示數(shù)據(jù)。,17,GridViewRow對(duì)象代表GridView控件中的一行,GridView的Rows屬性代表當(dāng)前顯示在頁(yè)面上所有GridViewRow對(duì)象的集合,TableCell代表一個(gè)單元格,這是一個(gè)控件容器,其中可以放置各種ASP.NET控件。GridViewRow對(duì)象的Cells集合代表這一行的所有單元格,形成GridView的全局觀(guān)(2),與GridView綁定的數(shù)據(jù)都具有二維表的性質(zhì)。若綁定的是DataTable,則每個(gè)GridView-Row對(duì)象負(fù)責(zé)顯示一個(gè)DataRow,而每個(gè)TableCell則負(fù)責(zé)顯示此DataRow中特定字段的值。若綁定的是List,每個(gè)GridViewRow對(duì)象負(fù)責(zé)顯示一個(gè)T類(lèi)型的對(duì)象,每個(gè)TableCell則負(fù)責(zé)顯示此對(duì)象的特定屬性的值。,18,數(shù)據(jù)綁定控件GridView中的列(1),GridView中的列可以用不同方式顯示數(shù)據(jù)。GridView列對(duì)象模型,19,數(shù)據(jù)綁定控件GridView中的列(2),BoundedField:直接與數(shù)據(jù)對(duì)象的某個(gè)“列/屬性”綁定,以文本形式顯示其值。HyperLinkField:根據(jù)數(shù)據(jù)對(duì)象某個(gè)列(屬性)的值生成一個(gè)超鏈接元素()。ImageField:根據(jù)數(shù)據(jù)對(duì)象某個(gè)列(屬性)的值生成一個(gè)元素,顯示一張圖片ButtonField:顯示一個(gè)按鈕。CommandField:其實(shí)就是擁有特定Command-Name的ButtonField,完成通用的“編輯”、“刪除”和“選擇”功能。TemplateField:模板列,用于自定義GridView的顯示界面,非常靈活與有用。,20,圖示GridView的列與行,21,CommandField,BoundedField,header,footer,Gridview的重要事件,GridView及GridViewRow會(huì)觸發(fā)一系列的事件,應(yīng)用好這些事件非常關(guān)鍵,常用的有以下幾個(gè):RowCommand:?jiǎn)螕裘啃兄械陌粹o(ButtonField)時(shí)觸發(fā),可通過(guò)CommandName區(qū)分開(kāi)是哪個(gè)按鈕被點(diǎn)擊。RowDataBound:給每行綁定數(shù)據(jù)時(shí)發(fā)生,通常用它來(lái)設(shè)置模板列中特定控件的屬性。RowDeleting:刪除一行時(shí)發(fā)生,可以取消刪除。RowUpdating:更新一行數(shù)據(jù)時(shí)發(fā)生,可以取消更新。SelectedIndexChanged:選擇的行發(fā)生改變時(shí)發(fā)生。PageIndexChanging:?jiǎn)螕舴猪?yè)按鈕時(shí)發(fā)生。,22,訪(fǎng)問(wèn)基礎(chǔ)數(shù)據(jù),使用GridViewRow對(duì)象的DataItem屬性,可以訪(fǎng)問(wèn)基礎(chǔ)數(shù)據(jù)對(duì)象的屬性。GridView控件的DataKeyNames屬性指定主鍵,每一行GridViewRow會(huì)生成一個(gè)DataKey對(duì)象,整個(gè)Gridview控件會(huì)有一個(gè)DataKey對(duì)象的集合(用DataKeys屬性代表)。可以通過(guò)Gridview的SelectedDataKey方法獲取當(dāng)前選中行的DataKey對(duì)象,然后再檢索鍵值。,23,掌握GridView編程技巧的關(guān)鍵,牢記:GridView只負(fù)責(zé)數(shù)據(jù)的顯示,它不管數(shù)據(jù)的增刪改查!記住GridView對(duì)象模型:行由哪個(gè)對(duì)象表達(dá),列有幾種類(lèi)型了解GridView的常用事件,知道這些事件可由哪些對(duì)象觸發(fā),高度注意每種事件參數(shù)中包含的信息。,24,10.3GridView應(yīng)用實(shí)例,本節(jié)示例網(wǎng)站GridViewDemo說(shuō)明,為了清晰地展示出GridView的使用技巧,實(shí)例使用手工數(shù)據(jù)綁定方式。綁定的數(shù)據(jù)來(lái)自于Clients表,對(duì)應(yīng)的類(lèi)為ClientInfo,GridView綁定到List集合對(duì)象。ClientInfoAccessObj對(duì)象包含一系列的方法,使用ADO.NET技術(shù)從數(shù)據(jù)庫(kù)中提取與更新數(shù)據(jù)。上述兩個(gè)類(lèi)均放置于示例網(wǎng)站的App_Code文件夾下。這種網(wǎng)站架構(gòu)也用于本系列的大實(shí)例HappyBookShop中。,26,實(shí)例1:自定義顯示列和列標(biāo)題,可以讓GridView只顯示特定的列,并且指定列的標(biāo)題。Demo:CustomizeColumns.aspx,27,實(shí)例1要點(diǎn):,28,從這個(gè)例子中可以知道,GridView會(huì)根據(jù)綁定的數(shù)據(jù)源自動(dòng)創(chuàng)建列,這是通過(guò)反射實(shí)現(xiàn)的。每個(gè)列都是一種特定類(lèi)型的DataControlField,可以通過(guò)設(shè)置它的一些屬性來(lái)定制它的外觀(guān)和行為。對(duì)于BoundedField,設(shè)定它的DataField,可以顯示它所綁定的數(shù)據(jù)對(duì)象特定屬性的值。,29,實(shí)例2:自定義分頁(yè),當(dāng)綁定到SqlDataSource時(shí),GridView的分頁(yè)功能是自動(dòng)實(shí)現(xiàn)的,不需要編寫(xiě)一行代碼。然而,當(dāng)綁定到功能較少的數(shù)據(jù)源,如List時(shí),就必須自己定義分頁(yè)代碼了,另外,分頁(yè)的格式往往也希望能自定義。Demo:GridViewPaging.aspx,30,每頁(yè)顯示5條記錄,自定義分頁(yè)按鈕格式,實(shí)例2要點(diǎn):,設(shè)置GridView的AllowPaging=True;PageSize=5;在GridView的PageIndexChanging事件中,設(shè)置其PageIndex為新頁(yè),然后重新綁定數(shù)據(jù)實(shí)現(xiàn)分頁(yè)。設(shè)置GridView的PagerSettings和PagerStyle屬性自定義分頁(yè)按鈕。,31,從這個(gè)例子中可以知道,分頁(yè)時(shí)GridView會(huì)觸發(fā)PageIndexChanging事件,相應(yīng)的,分頁(yè)完成時(shí)會(huì)觸發(fā)PageIndexChanged事件。在GridView中有不少事件是這樣配對(duì)的。一般來(lái)說(shuō),在“-ing”事件中,其參數(shù)e包含了重要的信息,例如分頁(yè)事件中的e.NewPageIndex屬性代表了新頁(yè)碼。而設(shè)置e.Cancel=true則可以取消這一操作。當(dāng)需要修改GridView顯示的數(shù)據(jù)時(shí)(比如跳轉(zhuǎn)到新的一頁(yè)),需要重新綁定數(shù)據(jù)。,32,GridView自定義分頁(yè),GridView具備自動(dòng)分頁(yè)的特性。這就是說(shuō),只要將綁定到一個(gè)數(shù)據(jù)源,并設(shè)置其每頁(yè)顯示的行數(shù)和要顯示的頁(yè)碼,GridView會(huì)自動(dòng)從數(shù)據(jù)源中提取數(shù)據(jù)(從開(kāi)頭第一頁(yè)到要顯示的頁(yè),然后丟棄前面的N1頁(yè),只顯示第N頁(yè))。對(duì)于List,由于其實(shí)現(xiàn)了IList接口,因此也具備自動(dòng)分頁(yè)的特性??梢酝ㄟ^(guò)每次只提取所需要的數(shù)據(jù)來(lái)提升性能,這時(shí)需要人工編寫(xiě)代碼來(lái)完成數(shù)據(jù)的提取工作,然后再將數(shù)據(jù)綁定到GridView。這種方法稱(chēng)為“自定義分頁(yè)”。為達(dá)到最佳性能,往往還禁用GridView的視圖狀態(tài)(EnableViewStatefalse),完全用其他標(biāo)準(zhǔn)的ASP.NET控件來(lái)實(shí)現(xiàn)分頁(yè)功能。,33,實(shí)例2延伸:GridView自定義分頁(yè),Demo:GridViewCustomizePaging.aspx,34,(1)查看一下源文件,禁用ViewState可以減少多少數(shù)據(jù)量的傳輸?。?)GridView內(nèi)置對(duì)于分頁(yè)界面的定制,只需添加一個(gè)數(shù)據(jù)分頁(yè)模板PagerTemplate就可以實(shí)現(xiàn)同這個(gè)示例一樣的功能??赏ㄟ^(guò)查詢(xún)MSDN實(shí)現(xiàn)示例的這種導(dǎo)航方式。,實(shí)例3:排序,GridViewSort.aspx,35,即可以單擊按鈕,也可以單擊列標(biāo)題進(jìn)行排序,支持多列排序,實(shí)例3要點(diǎn):,響應(yīng)Sorting事件,在此事件中編碼進(jìn)行數(shù)據(jù)綁定。利用委托實(shí)現(xiàn)對(duì)泛型數(shù)組中的對(duì)象進(jìn)行排序。GridView的一個(gè)基本編程方法:給GridView什么樣的數(shù)據(jù),它就忠實(shí)地呈現(xiàn)什么樣的數(shù)據(jù)。自我拓展訓(xùn)練:本示例是升序排列,如何讓其也支持降序排列?,36,實(shí)例4:記錄的刪除,GridViewDelete.aspx,37,實(shí)例4要點(diǎn),ButtonField可以綁定到數(shù)據(jù)源以顯示不同的文字,單擊它GridView會(huì)觸發(fā)RowCommand事件。此事件參數(shù)e有以下重要屬性:e.CommandName屬性表明哪個(gè)按鈕被單擊。e.CommandArgument屬性表明是哪一行,這個(gè)值是由GridView自動(dòng)填充的。e.CommandSource則代表了GridView自身。,38,GridView預(yù)定義的CommandName,當(dāng)一個(gè)ButtonField的CommandName是以下預(yù)定義值時(shí),相應(yīng)的事件被觸發(fā):Cancel:觸發(fā)“取消”事件。Delete:觸發(fā)“刪除”事件Edit:觸發(fā)“編輯”事件Page:觸發(fā)“分頁(yè)”事件Select:觸發(fā)“選擇”事件Sort:觸發(fā)“排序”事件Update:觸發(fā)“更新”事件CommandField是特殊的ButtonField,其CommandName是上述預(yù)定義值之一。,39,數(shù)據(jù)主鍵值的獲取,當(dāng)需要從數(shù)據(jù)庫(kù)刪除記錄時(shí),需要知道要?jiǎng)h除記錄的主鍵。GridView有一個(gè)DataKeyNames屬性,進(jìn)行綁定前必須將其設(shè)置為主鍵值名。當(dāng)需要獲取主鍵時(shí),根據(jù)指定行的索引,從GridView的“DataKeys索引.Value”得到主鍵值。提醒:這是編程中的一個(gè)關(guān)鍵點(diǎn)!,40,實(shí)例5:查找,GridViewFind.aspx,41,實(shí)例5分析,本實(shí)例再次采用了以下這種典型的編程方法:從數(shù)據(jù)庫(kù)中取出需要的數(shù)據(jù)傳送給GridView。對(duì)于分頁(yè):則利用了GridView的自動(dòng)分頁(yè)功能。通過(guò)設(shè)置其PageIndex實(shí)現(xiàn)分頁(yè)。,42,實(shí)例6:選中并編輯記錄,Demo:GridViewEdit.aspx,43,實(shí)例6的要點(diǎn),使用GridView的“選擇”功能,在GridView的SelectedIndexChanging事件中顯示一個(gè)編輯面板供用戶(hù)修改記錄。此面板完全是自定義的。SelectIndexChanging/SelectIndexChanged事件在主從表顯示中很有用。注意示例程序是如何取出選中記錄的當(dāng)前值的。txtName.Text=GridView1.Rowse.NewSelectedIndex.Cells1.Text;拓展訓(xùn)練:還可以利用GridView內(nèi)部集成的編輯功能讓其進(jìn)入編輯狀態(tài),在RowEditing中完成顯示編輯面板的任務(wù)。觸發(fā)RowEditing事件的方法在示例網(wǎng)頁(yè)中有說(shuō)明,同學(xué)們課后需完成這一作業(yè)。,44,GridView的模板列簡(jiǎn)介,在GridView的模板列中,可以添加各種Web控件,并通過(guò)編寫(xiě)代碼實(shí)現(xiàn)特定的數(shù)據(jù)處理工作,然后再將結(jié)果顯示在相應(yīng)的控件中。,45,實(shí)例7:模板列的應(yīng)用批處理刪除,一次選取多條記錄進(jìn)行統(tǒng)一處理。Demo:BatchDelete.aspx,46,實(shí)例7要點(diǎn)匯總,在模板中可以放置任意一種ASP.NET控件,從而使其成為最靈活的一種數(shù)據(jù)綁定方式,為廣大開(kāi)發(fā)者所喜用。當(dāng)需要訪(fǎng)問(wèn)特定行中的模板列中的某個(gè)特定控件時(shí),使用GridViewRow對(duì)象的FindControl(控件ID)方法,這是一個(gè)非常重要的編程方法。GridView的Rows集合存放的是當(dāng)前顯示在頁(yè)面上的行對(duì)象的集合。注意要使用視圖狀態(tài)保存當(dāng)前頁(yè)碼,以便用戶(hù)在刪除記錄后仍能回到上次工作的地方。GridView的DataKeyNames不要忘了設(shè)置,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論