ASPNET數據綁定技術之數據綁定課件_第1頁
ASPNET數據綁定技術之數據綁定課件_第2頁
ASPNET數據綁定技術之數據綁定課件_第3頁
ASPNET數據綁定技術之數據綁定課件_第4頁
ASPNET數據綁定技術之數據綁定課件_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據綁定技術原理ASP.NET數據綁定技術之數據綁定技術原理ASP.NET數據綁定技術之主要內容數據綁定原理GridView基礎知識GridView應用實例數據綁定控件的組合使用2主要內容數據綁定原理21數據綁定原理只有知其所以然才能知其然1數據綁定原理只有知其所以然才能知其然引例:直觀了解數據綁定現場編程展示(參考示例:UseDataBind)4引例:直觀了解數據綁定現場編程展示(參考示例:UseData數據綁定的層次結構數據庫ADO.NET數據綁定控件數據源控件5提供顯示和編輯數據的可視化界面IDataSourceDataSourceView提供對數據的訪問接口:增、刪、改、查與數據庫交互,完成信息的增、刪、改、查工作。信息的存放地調用存取數據綁定的層次結構數據庫ADO.NET數據綁定控件數據源控件常用的數據綁定控件控件名稱說明GridView以表格的方式顯示和編輯數據,DetailsView一次顯示、編輯、插入或刪除一條記錄。默認情況下,DetailsView控件將記錄的每個字段顯示在它自己的一行內。FormViewFormView控件與DetailsView控件相似,一次也只能顯示或編輯一條記錄。FormView需要給其設定一個模板。DataList控件可以用某種用戶指定的格式來顯示數據(比如分列顯示),這種格式由模板和樣式進行定義。RepeaterRepeater控件沒有包含內置的布局或樣式,需要由Web開發(fā)者指定所有的用于顯示數據的內部控件和顯示樣式ListViewASP.NET3.5新增,以嵌套容器模板和占位符的方式提供靈活的數據顯示模式6常用的數據綁定控件控件名稱說明GridView以表格的方式顯常用的數據源控件SqlDataSource可以連接到

ADO.NET支持的任何

SQL數據庫。AccessDataSource連接到使用

MicrosoftOffice創(chuàng)建的

Access數據庫。ObjectDataSource連接到應用程序的

Bin或

App_Code目錄中的中間層業(yè)務對象或數據集。XmlDataSource連接到

XML文件。SitemapDataSource連接到此應用程序的站點導航樹(要求應用程序根目錄處有一個有效的站點地圖文件,默認的文件名為“Web.sitemap”),站點地圖文件其實也是一個XML文件。LINQDataSource.NET3.0新增,可以訪問各種類型的數據,包括數據庫和XML文件。與C#/VB.NET等.NET語言直接集成。7常用的數據源控件SqlDataSource可以連接到ADO多種可綁定的數據對象除了綁定到數據源這種具有很強功能的對象之外,數據綁定控件還可以綁定到最小實現了IEnumerable接口的集合對象(比如數組/HashTable/List<T>)。另外,通過使用數據綁定表達式,可以將一些數據綁定控件直接與某個函數或屬性進行綁定。8多種可綁定的數據對象除了綁定到數據源這種具有很強功能的對象之數據綁定的三種實現方式:將數據綁定控件的DataSourceID設定為數據源控件,數據綁定控件即可充分利用數據源控件的功能實現對數據的“增刪改查”。這稱為“自動數據綁定”。也可以不使用DataSourceID,而是直接將數據源賦值給數據綁定控件的DataSource屬性,然后再調用數據綁定控件的DataBind()方法實現“手工數據綁定”?;蛘咧苯釉陧撁嬷蟹胖媒壎ū磉_式,然后在Page_Load中調用頁面類的DataBind()方法實現數據綁定。9數據綁定的三種實現方式:將數據綁定控件的DataSource數據綁定表達式第一步:設定數據表達式

<%#數據綁定表達式%>第二步:執(zhí)行Page類中的Bind()方法。Demo:UseDataBind(DataBindingExpression.aspx)10重要編程提示:直接在頁面中嵌入C#代碼的方法:<%=C#代碼%>無需調用Page.Bind()方法,上述代碼總是執(zhí)行。數據綁定表達式第一步:設定數據表達式10重要編程提示:理解“數據綁定模板”由于要顯示的數據通常包含多條結構類似的記錄,因此,經常使用“模板(Template)”來指定單條記錄的顯示格式,然后,數據綁定控件自動將這一定義好的模板應用于所有要顯示的記錄。可以針對不同的場景定義不同的模板,比如為瀏覽狀態(tài)顯示一個只讀的模板(通常用Label來表達信息),然后為編輯狀態(tài)顯示另一個模板(通常用TextBox來向用戶提供修改信息的手段)。大多數數據綁定控件都提供了相應的方法在不同的狀態(tài)間切換(比如從瀏覽切換到編輯狀態(tài)),并會自動加載相應的模板,與此同時,還會激發(fā)相應的事件。11理解“數據綁定模板”由于要顯示的數據通常包含多條結構類似的記在數據綁定模板中綁定數據(1)當一個ASP.NET控件位于一個數據綁定模板中時,可以使用Eval()方法將其的某個屬性與數據源中當前數據對象的某個屬性相綁定。12<ItemTemplate>ClientID:<asp:LabelID="ClientIDLabel"runat="server"Text='<%#Eval("ClientID")%>'/></ItemTemplate>Eval方法提供了一個單向的只讀的數據值。這就是說,數據是從“數據源”對象單向傳送給模板中的控件,沒有辦法修改數據源對象中的數據。在數據綁定模板中綁定數據(1)當一個ASP.NET控件位于一在數據綁定模板中綁定數據(2)當需要修改數據源中的數據時,通常采用Bind()方法實現這一功能:13<EditItemTemplate>ClientName:<asp:TextBoxID="ClientNameTextBox"runat="server"Text='<%#Bind("ClientName")%>'/></EditItemTemplate>當使用Bind方法時,用戶所作的修改會被傳送回數據源控件以實現更新。在數據綁定模板中綁定數據(2)當需要修改數據源中的數據時,通數據綁定實例分析Demo:UseDataBind(UseEvalAndBind.aspx)14示例要點:使用FormView控件綁定到SQLDataSource,定義其編輯和插入模板。數據綁定實例分析Demo:UseDataBind(UseE自動綁定VS手工綁定ASP.NET提供的自動數據綁定機制雖然很自動化,幾乎不用編碼就可以完成許多功能,然而,在實際項目中為了實現嚴格的分層架構和保證程序的靈活性與可控性,往往不使用自動綁定,而是手工編程實現數據綁定。下面我們將以最復雜也是最常用的GridView為例,深入介紹數據綁定控件的使用方法。15自動綁定VS手工綁定ASP.NET提供的自動數據綁定機制2GRIDVIEW基礎知識以點帶面,舉一反三2GRIDVIEW基礎知識以點帶面,舉一反三形成GRIDVIEW的全局觀(1)GridView以表格的方式顯示數據。17GridViewRow對象代表GridView控件中的一行,GridView的Rows屬性代表當前顯示在頁面上所有GridViewRow對象的集合TableCell代表一個單元格,這是一個控件容器,其中可以放置各種ASP.NET控件。

GridViewRow對象的Cells集合代表這一行的所有單元格形成GRIDVIEW的全局觀(1)GridView以表格的方形成GRIDVIEW的全局觀(2)與GridView綁定的數據都具有二維表的性質。若綁定的是DataTable,則每個GridViewRow對象負責顯示一個DataRow,而每個TableCell則負責顯示此DataRow中特定字段的值。若綁定的是List<T>,則每個GridViewRow對象負責顯示一個T類型的對象,而每個TableCell則負責顯示此對象的特定屬性的值。18形成GRIDVIEW的全局觀(2)與GridView綁定的數數據綁定控件GRIDVIEW中的列(1)GridView中的列可以用不同方式顯示數據。Gridview列對象模型19數據綁定控件GRIDVIEW中的列(1)GridView中的數據綁定控件GRIDVIEW中的列(2)BoundedField:直接與數據對象的某個“列/屬性”綁定,以文本形式顯示其值。HyperLinkField:根據數據對象某個列(屬性)的值生成一個超鏈接元素(<a>)。ImageField:根據數據對象某個列(屬性)的值生成一個<img>元素,顯示一張圖片ButtonField:顯示一個按鈕CommandField:其實就是擁有特定CommandName的ButtonField,完成通用的“編輯”、“刪除”和“選擇”功能。TemplateField:模板列,用于自定義GridView的顯示界面,非常靈活與有用。20數據綁定控件GRIDVIEW中的列(2)BoundedFie圖示GRIDVIEW的列與行21CommandFieldBoundedFieldheaderfooter圖示GRIDVIEW的列與行21CommandFieldBoGRIDVIEW的重要事件GridView及GridViewRow會引發(fā)一系列的事件,應用好這些事件非常關鍵,常用的有以下幾個:RowCommand:點擊每行中的按鈕(ButtonField)時引發(fā),可通過CommandName區(qū)分開是哪個按鈕被點擊。RowDataBound:給每行綁定數據時發(fā)生,通常用它來設置模板列中特定控件的屬性。RowDeleting:刪除一行時發(fā)生,可以取消刪除。RowUpdating:更新一行數據時發(fā)生,可以取消更新。SelectedIndexChanged

:選擇的行發(fā)生改變時發(fā)生。PageIndexChanging:點擊分頁按鈕時發(fā)生。22GRIDVIEW的重要事件GridView及GridView訪問基礎數據使用GridViewRow對象的DataItem屬性,可以訪問基礎數據對象的屬性GridView控件的DataKeyNames屬性用于指定主鍵,每一行GridViewRow會生成一個DataKey對象,整個Gridview控件會有一個DataKey對象的集合(用DataKeys屬性代表)??梢酝ㄟ^Gridview的SelectedDataKey方法獲取當前選中行的DataKey對象,然后再檢索鍵值。23訪問基礎數據使用GridViewRow對象的DataIte掌握GRIDVIEW編程技巧的關鍵牢記:GridView只負責數據的顯示,它不管數據的增刪改查!記住GridView對象模型:

行由哪個對象表達,列有幾種類型了解GridView的常用事件,知道這些事件可由哪些對象引發(fā),高度注意每種事件參數中包含的信息。24掌握GRIDVIEW編程技巧的關鍵牢記:GridView只負3GRIDVIEW應用實例3GRIDVIEW應用實例本節(jié)示例網站GRIDVIEWDEMO說明為了清晰地展示出GridView的使用技巧,實例使用手工數據綁定方式。綁定的數據來自于Clients表,對應的類為ClientInfo,GridView綁定到List<ClientInfo>集合對象。ClientInfoAccessObj對象包含一系列的方法,使用ADO.NET技術從數據庫中提取與更新數據。上述兩個類均放置于示例網站的App_Code文件夾下。這種網站架構也用于本系列的大實例HappyBookShop中。26本節(jié)示例網站GRIDVIEWDEMO說明為了清晰地展示出Gr實例1:自定義顯示列和列標題可以讓GridView只顯示特定的列,并且指定列的標題。Demo:CustomizeColumns.aspx27實例1:自定義顯示列和列標題可以讓GridView只顯示特定實例1要點:28實例1要點:28從這個例子中我們可以知道GridView會根據綁定的數據源自動創(chuàng)建列,這是通過反射實現的。每個列都是一種特定類型的DataControlField,可以通過設置它的一些屬性來定制它的外觀和行為。對于BoundedField,設定它的DataField,可以顯示它所綁定的數據對象特定屬性的值。29從這個例子中我們可以知道GridView會根據綁定的數據源自實例2:自定義分頁當綁定到SqlDataSource時,GridView的分頁功能是自動實現的,不需要編寫一行代碼。然而,當綁定到功能較少的數據源,比如List<T>時,就必須自己定義分頁代碼了,另外,分頁的格式往往也希望能自定義。Demo:GridViewPaging.aspx30每頁顯示5條記錄自定義分頁按鈕格式實例2:自定義分頁當綁定到SqlDataSource時,Gr實例2要點:設置GridView的AllowPaging="True";PageSize="5";在GridView的PageIndexChanging事件中設置其PageIndex為新頁,然后重新綁定數據實現分頁。設置GridView的PagerSettings和PagerStyle屬性自定義分頁按鈕。

31實例2要點:設置GridView的AllowPaging="從這個例子中我們知道分頁時GridView會激發(fā)PageIndexChanging事件,對應地,分頁完成時會激發(fā)PageIndexChanged事件。在GridView中有不少事件是這樣配對的。一般來說,在“-ing”事件中,其參數e包含了重要的信息,比如分頁事件中的e.NewPageIndex屬性代表了新頁碼。而設置e.Cancel=true則可以取消這一操作。當需要修改GridView顯示的數據時(比如跳轉到新的一頁),需要重新綁定數據。32從這個例子中我們知道分頁時GridView會激發(fā)PageInGRIDVIEW自定義分頁GridView具備自動分頁的特性。這就是說,只要將綁定到一個數據源,并設置其每頁顯示的行數和要顯示的頁碼,GridView會自動從數據源中提取數據(從開頭第一頁到要顯示的頁,然后丟棄前面的N-1頁,只顯示第N頁)。對于List<T>,由于其實現了IList接口,因此也具備自動分頁的特性??梢酝ㄟ^每次只提取所需要的數據來提升性能,這時需要人工編寫代碼來完成數據的提取工作,然后再將數據綁定到GridView。這種方法稱為“自定義分頁”。為達到最佳性能,往往還禁用GridView的視圖狀態(tài)(EnableViewState=false),完全用其他標準的ASP.NET控件來實現分頁功能。33GRIDVIEW自定義分頁GridView具備自動分頁的特性實例2延伸:GRIDVIEW自定義分頁Demo:GridViewCustomizePaging.aspx34(1)查看一下源文件,禁用ViewState可以減少多少數據量的傳輸!(2)GridView內置對于分頁界面的定制,只需添加一個數據分頁模板PagerTemplate

就可以實現同這個示例一樣的功能。請通過查詢MSDN實現示例的這種導航方式。實例2延伸:GRIDVIEW自定義分頁Demo:GridV實例3:排序GridViewSort.aspx35即可以點擊按鈕,也可以點擊列標題進行排序支持多列排序實例3:排序GridViewSort.aspx35即可以點擊實例3要點:響應Sorting事件,在此事件中編碼進行數據綁定利用委托實現對泛型數組中的對象進行排序。GridView的一個基本編程方法:喂給GridView什么樣的數據,它就忠實地呈現什么樣的數據。自我拓展訓練:本示例是升序排列,如何讓其也支持降序排列?36實例3要點:響應Sorting事件,在此事件中編碼進行數據綁實例4:記錄的刪除GridViewDelete.aspx37實例4:記錄的刪除GridViewDelete.aspx37實例4要點ButtonField可以綁定到數據源以顯示不同的文字,點擊它GridView會引發(fā)RowCommand事件。此事件參數e有以下重要屬性:e.CommandName屬性表明哪個按鈕被點擊。e.CommandArgument屬性表明是哪一行,這個值是由GridView自動填充的。e.CommandSource則代表了GridView自身。38實例4要點ButtonField可以綁定到數據源以顯示不同的GRIDVIEW預定義的COMMANDNAME當一個ButtonField的CommandName是以下預定義值時,相應的事件被激發(fā):Cancel:引發(fā)“取消”事件。Delete:引發(fā)“刪除”事件Edit:引發(fā)“編輯”事件Page:引發(fā)“分頁”事件Select:引發(fā)“選擇”事件Sort:引發(fā)“排序”事件Update:引發(fā)“更新”事件CommandField是特殊的ButtonField,其CommandName是上述預定義值之一。39GRIDVIEW預定義的COMMANDNAME當一個Butt數據主鍵值的獲取當需要從數據庫刪除記錄時,需要知道要刪除記錄的主鍵。GridView有一個DataKeyNames屬性,進行綁定前必須將其設置為主鍵值名。當需要獲取主鍵時,根據指定行的索引,從GridView的“DataKeys[索引].Value”得到主鍵值。提醒:這是編程中的一個關鍵點!40數據主鍵值的獲取當需要從數據庫刪除記錄時,需要知道要刪除記錄實例5:查找GridViewFind.aspx41實例5:查找GridViewFind.aspx41實例5分析本實例再次采用了以下這種典型的編程方法:從數據庫中取出需要的數據“喂”給GridView。對于分頁:則利用了GridView的自動分頁功能。通過設置其PageIndex實現分頁。42實例5分析本實例再次采用了以下這種典型的編程方法:42實例6:選中并編輯記錄Demo:GridViewEdit.aspx43實例6:選中并編輯記錄Demo:GridViewEdit.a實例6的要點使用GridView的“選擇”功能,在GridView的SelectedIndexChanging事件中顯示一個編輯面板供用戶修改記錄。此面板完全是自定義的。SelectIndexChanging/SelectIndexChanged事件在主從表顯示中很有用。注意示例程序是如何取出選中記錄的當前值的。txtName.Text=GridView1.Rows[e.NewSelectedIndex].Cells[1].Text;拓展訓練:

還可以利用GridView內部集成的編輯功能讓其進入編輯狀態(tài),在RowEditing中完成顯示編輯面板的任務。激發(fā)RowEditing事件的方法在示例網頁中有說明,請同學們課后完成這一作業(yè)。44實例6的要點使用GridView的“選擇”功能,在GridVGRIDVIEW的模板列簡介在GridView的模板列中,可以添加各種Web控件,并通過編寫代碼實現特定的數據處理工作,然后再將結果顯示在相應的控件中。45GRIDVIEW的模板列簡介在GridView的模板列中,可實例7:模板列的應用——批處理刪除一次選取多條記錄進行統(tǒng)一處理。Demo:BatchDelete.aspx46實例7:模板列的應用——批處理刪除一次選取多條記錄進行統(tǒng)一處實例7要點匯總在模板中可以放置任意一種ASP.NET控件,從而使其成為最靈活的一種數據綁定方式,為廣大開發(fā)者所喜用。當需要訪問特定行中的模板列中的某個特定控件時,請使用GridViewRow對象的FindControl(“控件ID”)方法,這是一個非常重要的編程方法。GridView的Rows集合存放的是當前顯示在頁面上的行對象的集合。注意要使用視圖狀態(tài)保存當前頁碼,以便用戶在刪除記錄后仍能回到上次工作的地方。GridView的DataKeyNames不要忘了設置,否則取不出主鍵。47實例7要點匯總在模板中可以放置任意一種ASP.NET控件,從4數據綁定控件的組合使用示例網站:DataControlsDemo4數據綁定控件的組合使用示例網站:DataControls實例1:嵌套控件在GridView模板列中嵌入其他的數據綁定控件:出版社和書名Demo:EmbodiedDataBindControl.aspx49實例1:嵌套控件在GridView模板列中嵌入其他的數據綁實例1分析DataAccessObj類負責向網頁提供數據源。在GridView中創(chuàng)建一個模板列,其中嵌套一個BulletedList控件。GridView綁定到DataTable,在GridView的RowDataBound事件中綁定嵌套的數據控件。提示:

高度注意RowDataBound事件中代碼的寫法:(1)如何提取出當前行所對應的數據對象?(2)如何查找模板列中的特定控件?(3)為何要判定行的類型?50實例1分析DataAccessObj類負責向網頁提供數據源。實例2:數據篩選與合計DropDownList與GridView配合實現數據篩選。Demo:DropDownListAndGridView.aspx51實例2:數據篩選與合計DropDownList與GridVi實例2要點分析DropDownList可以綁定到List<T>,注意它的DataTextField和 DataValueField兩個屬性。在GridView的RowDataBound中完成合計工作,并將結果動態(tài)地添加到頁面上。注意其實現方法。52實例2要點分析DropDownList可以綁定到List<T實例3:主從表MasterDetail.aspx53主表顯示書,從表顯示讀者評論實例3:主從表MasterDetail.aspx53主表顯示實例3分析主表顯示一個“選擇”按鈕,這是使用GridView內置的選擇功能實現的。在主表的SelectedIndexChanging事件中取出選中行的主鍵,根據主鍵到數據庫中提取記錄,再綁定到從表。54實例3分析主表顯示一個“選擇”按鈕,這是使用GridVie數據綁定技術原理ASP.NET數據綁定技術之數據綁定技術原理ASP.NET數據綁定技術之主要內容數據綁定原理GridView基礎知識GridView應用實例數據綁定控件的組合使用56主要內容數據綁定原理21數據綁定原理只有知其所以然才能知其然1數據綁定原理只有知其所以然才能知其然引例:直觀了解數據綁定現場編程展示(參考示例:UseDataBind)58引例:直觀了解數據綁定現場編程展示(參考示例:UseData數據綁定的層次結構數據庫ADO.NET數據綁定控件數據源控件59提供顯示和編輯數據的可視化界面IDataSourceDataSourceView提供對數據的訪問接口:增、刪、改、查與數據庫交互,完成信息的增、刪、改、查工作。信息的存放地調用存取數據綁定的層次結構數據庫ADO.NET數據綁定控件數據源控件常用的數據綁定控件控件名稱說明GridView以表格的方式顯示和編輯數據,DetailsView一次顯示、編輯、插入或刪除一條記錄。默認情況下,DetailsView控件將記錄的每個字段顯示在它自己的一行內。FormViewFormView控件與DetailsView控件相似,一次也只能顯示或編輯一條記錄。FormView需要給其設定一個模板。DataList控件可以用某種用戶指定的格式來顯示數據(比如分列顯示),這種格式由模板和樣式進行定義。RepeaterRepeater控件沒有包含內置的布局或樣式,需要由Web開發(fā)者指定所有的用于顯示數據的內部控件和顯示樣式ListViewASP.NET3.5新增,以嵌套容器模板和占位符的方式提供靈活的數據顯示模式60常用的數據綁定控件控件名稱說明GridView以表格的方式顯常用的數據源控件SqlDataSource可以連接到

ADO.NET支持的任何

SQL數據庫。AccessDataSource連接到使用

MicrosoftOffice創(chuàng)建的

Access數據庫。ObjectDataSource連接到應用程序的

Bin或

App_Code目錄中的中間層業(yè)務對象或數據集。XmlDataSource連接到

XML文件。SitemapDataSource連接到此應用程序的站點導航樹(要求應用程序根目錄處有一個有效的站點地圖文件,默認的文件名為“Web.sitemap”),站點地圖文件其實也是一個XML文件。LINQDataSource.NET3.0新增,可以訪問各種類型的數據,包括數據庫和XML文件。與C#/VB.NET等.NET語言直接集成。61常用的數據源控件SqlDataSource可以連接到ADO多種可綁定的數據對象除了綁定到數據源這種具有很強功能的對象之外,數據綁定控件還可以綁定到最小實現了IEnumerable接口的集合對象(比如數組/HashTable/List<T>)。另外,通過使用數據綁定表達式,可以將一些數據綁定控件直接與某個函數或屬性進行綁定。62多種可綁定的數據對象除了綁定到數據源這種具有很強功能的對象之數據綁定的三種實現方式:將數據綁定控件的DataSourceID設定為數據源控件,數據綁定控件即可充分利用數據源控件的功能實現對數據的“增刪改查”。這稱為“自動數據綁定”。也可以不使用DataSourceID,而是直接將數據源賦值給數據綁定控件的DataSource屬性,然后再調用數據綁定控件的DataBind()方法實現“手工數據綁定”。或者直接在頁面中放置綁定表達式,然后在Page_Load中調用頁面類的DataBind()方法實現數據綁定。63數據綁定的三種實現方式:將數據綁定控件的DataSource數據綁定表達式第一步:設定數據表達式

<%#數據綁定表達式%>第二步:執(zhí)行Page類中的Bind()方法。Demo:UseDataBind(DataBindingExpression.aspx)64重要編程提示:直接在頁面中嵌入C#代碼的方法:<%=C#代碼%>無需調用Page.Bind()方法,上述代碼總是執(zhí)行。數據綁定表達式第一步:設定數據表達式10重要編程提示:理解“數據綁定模板”由于要顯示的數據通常包含多條結構類似的記錄,因此,經常使用“模板(Template)”來指定單條記錄的顯示格式,然后,數據綁定控件自動將這一定義好的模板應用于所有要顯示的記錄??梢葬槍Σ煌膱鼍岸x不同的模板,比如為瀏覽狀態(tài)顯示一個只讀的模板(通常用Label來表達信息),然后為編輯狀態(tài)顯示另一個模板(通常用TextBox來向用戶提供修改信息的手段)。大多數數據綁定控件都提供了相應的方法在不同的狀態(tài)間切換(比如從瀏覽切換到編輯狀態(tài)),并會自動加載相應的模板,與此同時,還會激發(fā)相應的事件。65理解“數據綁定模板”由于要顯示的數據通常包含多條結構類似的記在數據綁定模板中綁定數據(1)當一個ASP.NET控件位于一個數據綁定模板中時,可以使用Eval()方法將其的某個屬性與數據源中當前數據對象的某個屬性相綁定。66<ItemTemplate>ClientID:<asp:LabelID="ClientIDLabel"runat="server"Text='<%#Eval("ClientID")%>'/></ItemTemplate>Eval方法提供了一個單向的只讀的數據值。這就是說,數據是從“數據源”對象單向傳送給模板中的控件,沒有辦法修改數據源對象中的數據。在數據綁定模板中綁定數據(1)當一個ASP.NET控件位于一在數據綁定模板中綁定數據(2)當需要修改數據源中的數據時,通常采用Bind()方法實現這一功能:67<EditItemTemplate>ClientName:<asp:TextBoxID="ClientNameTextBox"runat="server"Text='<%#Bind("ClientName")%>'/></EditItemTemplate>當使用Bind方法時,用戶所作的修改會被傳送回數據源控件以實現更新。在數據綁定模板中綁定數據(2)當需要修改數據源中的數據時,通數據綁定實例分析Demo:UseDataBind(UseEvalAndBind.aspx)68示例要點:使用FormView控件綁定到SQLDataSource,定義其編輯和插入模板。數據綁定實例分析Demo:UseDataBind(UseE自動綁定VS手工綁定ASP.NET提供的自動數據綁定機制雖然很自動化,幾乎不用編碼就可以完成許多功能,然而,在實際項目中為了實現嚴格的分層架構和保證程序的靈活性與可控性,往往不使用自動綁定,而是手工編程實現數據綁定。下面我們將以最復雜也是最常用的GridView為例,深入介紹數據綁定控件的使用方法。69自動綁定VS手工綁定ASP.NET提供的自動數據綁定機制2GRIDVIEW基礎知識以點帶面,舉一反三2GRIDVIEW基礎知識以點帶面,舉一反三形成GRIDVIEW的全局觀(1)GridView以表格的方式顯示數據。71GridViewRow對象代表GridView控件中的一行,GridView的Rows屬性代表當前顯示在頁面上所有GridViewRow對象的集合TableCell代表一個單元格,這是一個控件容器,其中可以放置各種ASP.NET控件。

GridViewRow對象的Cells集合代表這一行的所有單元格形成GRIDVIEW的全局觀(1)GridView以表格的方形成GRIDVIEW的全局觀(2)與GridView綁定的數據都具有二維表的性質。若綁定的是DataTable,則每個GridViewRow對象負責顯示一個DataRow,而每個TableCell則負責顯示此DataRow中特定字段的值。若綁定的是List<T>,則每個GridViewRow對象負責顯示一個T類型的對象,而每個TableCell則負責顯示此對象的特定屬性的值。72形成GRIDVIEW的全局觀(2)與GridView綁定的數數據綁定控件GRIDVIEW中的列(1)GridView中的列可以用不同方式顯示數據。Gridview列對象模型73數據綁定控件GRIDVIEW中的列(1)GridView中的數據綁定控件GRIDVIEW中的列(2)BoundedField:直接與數據對象的某個“列/屬性”綁定,以文本形式顯示其值。HyperLinkField:根據數據對象某個列(屬性)的值生成一個超鏈接元素(<a>)。ImageField:根據數據對象某個列(屬性)的值生成一個<img>元素,顯示一張圖片ButtonField:顯示一個按鈕CommandField:其實就是擁有特定CommandName的ButtonField,完成通用的“編輯”、“刪除”和“選擇”功能。TemplateField:模板列,用于自定義GridView的顯示界面,非常靈活與有用。74數據綁定控件GRIDVIEW中的列(2)BoundedFie圖示GRIDVIEW的列與行75CommandFieldBoundedFieldheaderfooter圖示GRIDVIEW的列與行21CommandFieldBoGRIDVIEW的重要事件GridView及GridViewRow會引發(fā)一系列的事件,應用好這些事件非常關鍵,常用的有以下幾個:RowCommand:點擊每行中的按鈕(ButtonField)時引發(fā),可通過CommandName區(qū)分開是哪個按鈕被點擊。RowDataBound:給每行綁定數據時發(fā)生,通常用它來設置模板列中特定控件的屬性。RowDeleting:刪除一行時發(fā)生,可以取消刪除。RowUpdating:更新一行數據時發(fā)生,可以取消更新。SelectedIndexChanged

:選擇的行發(fā)生改變時發(fā)生。PageIndexChanging:點擊分頁按鈕時發(fā)生。76GRIDVIEW的重要事件GridView及GridView訪問基礎數據使用GridViewRow對象的DataItem屬性,可以訪問基礎數據對象的屬性GridView控件的DataKeyNames屬性用于指定主鍵,每一行GridViewRow會生成一個DataKey對象,整個Gridview控件會有一個DataKey對象的集合(用DataKeys屬性代表)。可以通過Gridview的SelectedDataKey方法獲取當前選中行的DataKey對象,然后再檢索鍵值。77訪問基礎數據使用GridViewRow對象的DataIte掌握GRIDVIEW編程技巧的關鍵牢記:GridView只負責數據的顯示,它不管數據的增刪改查!記住GridView對象模型:

行由哪個對象表達,列有幾種類型了解GridView的常用事件,知道這些事件可由哪些對象引發(fā),高度注意每種事件參數中包含的信息。78掌握GRIDVIEW編程技巧的關鍵牢記:GridView只負3GRIDVIEW應用實例3GRIDVIEW應用實例本節(jié)示例網站GRIDVIEWDEMO說明為了清晰地展示出GridView的使用技巧,實例使用手工數據綁定方式。綁定的數據來自于Clients表,對應的類為ClientInfo,GridView綁定到List<ClientInfo>集合對象。ClientInfoAccessObj對象包含一系列的方法,使用ADO.NET技術從數據庫中提取與更新數據。上述兩個類均放置于示例網站的App_Code文件夾下。這種網站架構也用于本系列的大實例HappyBookShop中。80本節(jié)示例網站GRIDVIEWDEMO說明為了清晰地展示出Gr實例1:自定義顯示列和列標題可以讓GridView只顯示特定的列,并且指定列的標題。Demo:CustomizeColumns.aspx81實例1:自定義顯示列和列標題可以讓GridView只顯示特定實例1要點:82實例1要點:28從這個例子中我們可以知道GridView會根據綁定的數據源自動創(chuàng)建列,這是通過反射實現的。每個列都是一種特定類型的DataControlField,可以通過設置它的一些屬性來定制它的外觀和行為。對于BoundedField,設定它的DataField,可以顯示它所綁定的數據對象特定屬性的值。83從這個例子中我們可以知道GridView會根據綁定的數據源自實例2:自定義分頁當綁定到SqlDataSource時,GridView的分頁功能是自動實現的,不需要編寫一行代碼。然而,當綁定到功能較少的數據源,比如List<T>時,就必須自己定義分頁代碼了,另外,分頁的格式往往也希望能自定義。Demo:GridViewPaging.aspx84每頁顯示5條記錄自定義分頁按鈕格式實例2:自定義分頁當綁定到SqlDataSource時,Gr實例2要點:設置GridView的AllowPaging="True";PageSize="5";在GridView的PageIndexChanging事件中設置其PageIndex為新頁,然后重新綁定數據實現分頁。設置GridView的PagerSettings和PagerStyle屬性自定義分頁按鈕。

85實例2要點:設置GridView的AllowPaging="從這個例子中我們知道分頁時GridView會激發(fā)PageIndexChanging事件,對應地,分頁完成時會激發(fā)PageIndexChanged事件。在GridView中有不少事件是這樣配對的。一般來說,在“-ing”事件中,其參數e包含了重要的信息,比如分頁事件中的e.NewPageIndex屬性代表了新頁碼。而設置e.Cancel=true則可以取消這一操作。當需要修改GridView顯示的數據時(比如跳轉到新的一頁),需要重新綁定數據。86從這個例子中我們知道分頁時GridView會激發(fā)PageInGRIDVIEW自定義分頁GridView具備自動分頁的特性。這就是說,只要將綁定到一個數據源,并設置其每頁顯示的行數和要顯示的頁碼,GridView會自動從數據源中提取數據(從開頭第一頁到要顯示的頁,然后丟棄前面的N-1頁,只顯示第N頁)。對于List<T>,由于其實現了IList接口,因此也具備自動分頁的特性??梢酝ㄟ^每次只提取所需要的數據來提升性能,這時需要人工編寫代碼來完成數據的提取工作,然后再將數據綁定到GridView。這種方法稱為“自定義分頁”。為達到最佳性能,往往還禁用GridView的視圖狀態(tài)(EnableViewState=false),完全用其他標準的ASP.NET控件來實現分頁功能。87GRIDVIEW自定義分頁GridView具備自動分頁的特性實例2延伸:GRIDVIEW自定義分頁Demo:GridViewCustomizePaging.aspx88(1)查看一下源文件,禁用ViewState可以減少多少數據量的傳輸?。?)GridView內置對于分頁界面的定制,只需添加一個數據分頁模板PagerTemplate

就可以實現同這個示例一樣的功能。請通過查詢MSDN實現示例的這種導航方式。實例2延伸:GRIDVIEW自定義分頁Demo:GridV實例3:排序GridViewSort.aspx89即可以點擊按鈕,也可以點擊列標題進行排序支持多列排序實例3:排序GridViewSort.aspx35即可以點擊實例3要點:響應Sorting事件,在此事件中編碼進行數據綁定利用委托實現對泛型數組中的對象進行排序。GridView的一個基本編程方法:喂給GridView什么樣的數據,它就忠實地呈現什么樣的數據。自我拓展訓練:本示例是升序排列,如何讓其也支持降序排列?90實例3要點:響應Sorting事件,在此事件中編碼進行數據綁實例4:記錄的刪除GridViewDelete.aspx91實例4:記錄的刪除GridViewDelete.aspx37實例4要點ButtonField可以綁定到數據源以顯示不同的文字,點擊它GridView會引發(fā)RowCommand事件。此事件參數e有以下重要屬性:e.CommandName屬性表明哪個按鈕被點擊。e.CommandArgument屬性表明是哪一行,這個值是由GridView自動填充的。e.CommandSource則代表了GridView自身。92實例4要點ButtonField可以綁定到數據源以顯示不同的GRIDVIEW預定義的COMMANDNAME當一個ButtonField的CommandName是以下預定義值時,相應的事件被激發(fā):Cancel:引發(fā)“取消”事件。Delete:引發(fā)“刪除”事件Edit:引發(fā)“編輯”事件Page:引發(fā)“分頁”事件Select:引發(fā)“選擇”事件Sort:引發(fā)“排序”事件Update:引發(fā)“更新”事件CommandField是特殊的ButtonField,其CommandName是上述預定義值之一。93GRIDVIEW預定義的COMMANDNAME當一個Butt數據主鍵值的獲取當需要從數據庫刪除記錄時,需要知道要刪除記錄的主鍵。GridView有一個DataKeyNames屬性,進行綁定前必須將其設置為主鍵值名。當需要獲取主鍵時,根據指定行的索引,從GridView的“DataKeys[索引].Value”得到主鍵值。提醒:這是編程中的一個關鍵點!94數據主鍵值的獲取當需要從數據庫刪除記錄時,需要知道要刪除記錄實例5:查找GridViewFind.aspx95實例5:查找GridViewFind.aspx41實例5分析本實例再次采用了以下這種典型的編程方法:從數據庫中取出需要的數據“喂”給GridV

溫馨提示

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

評論

0/150

提交評論