?、俦磉_(dá)式 <%# 數(shù)據(jù)綁定表達(dá)式 %> ②在頁(yè)面編寫代碼 <%= C#代碼 %> //調(diào)用后臺(tái)變量或者方法的時(shí)候,,會(huì)用到這種表達(dá)式
2.單向綁定 提供一個(gè)單向的只讀的數(shù)據(jù)值,,只能從數(shù)據(jù)源中讀取數(shù)據(jù),不能修改數(shù)據(jù)源中的數(shù)據(jù),! 語(yǔ)法: Eval(“列名|屬性名等等”) 原理:通過(guò)反射的機(jī)制來(lái)實(shí)現(xiàn)綁定計(jì)算,,寫“Eval”會(huì)在底層調(diào)用DataBinder中的靜態(tài)方法Eval! 推薦使用:DataBinder.Eval()用這種方式來(lái)綁定數(shù)據(jù),!
上面是他的三個(gè)重載方法,! 第一個(gè)參數(shù)始終是 → Container.DataItem 第二個(gè)參數(shù)是 → 你要綁定的數(shù)據(jù),,如列名,,屬性名等等 第三個(gè)參數(shù)是 → 字符串格式化 如果需要詳細(xì)了解,請(qǐng)參考:深入ASP.NET數(shù)據(jù)綁定(上),,這是一篇深入理解單向數(shù)據(jù)綁定的好文,!
3.雙向綁定 雙向綁定:既可以讀取數(shù)據(jù)源的值,,又可以修改數(shù)據(jù)源的值,以便進(jìn)行數(shù)據(jù)的更新,,主要用于GridView,,DataList等支持編輯功能的控件! 語(yǔ)法: Bind(“列名|屬性名等等”) 推薦文章:深入ASP.NET數(shù)據(jù)綁定(中)——數(shù)據(jù)雙向綁定機(jī)理 4.數(shù)據(jù)綁定表達(dá)式可以是哪些類型呢,? ?、倏梢允莻€(gè)變量 例如:<asp:Label ID="Label1" runat="server" Text="<%= 變量名%>"></asp:Label> 注意如果是變量,,變量的反問(wèn)修飾符不能是私有的,必須要為“public”或“protected”的,! Note:變量必須使用“=”才能有效果,! ②可以是服務(wù)器控件的屬性值 例如:<asp:Label ID="Label1" runat="server" Text="<%#TextBox2.Text %>"></asp:Label> ?、劭梢允且粋€(gè)數(shù)組或集合 這種類型主要針對(duì)“DropDownList”,,“ListBox”這類的控件! 有一個(gè)數(shù)組: public string[] str = { "22", "333", "4444444", "55555555555" }; 那么你可以在前端進(jìn)行綁定:<asp:DropDownList ID="DropDownList1" runat="server" DataSource="<%# str %>" > </asp:DropDownList> Note:你必須要在后臺(tái)調(diào)用控件的“DataBind”方法,,不然是沒(méi)有效果的,! ④可以是個(gè)表達(dá)式 這個(gè)說(shuō)明,,你可以使用幾種數(shù)據(jù)并接成你想要的數(shù)據(jù),! 如:我們要在一個(gè)Label中顯示一個(gè)用戶的全名,那么我們就可以這樣寫<%#(Person.FirstName+"" + Person.LastName)%>,。 ?、菘梢允莻€(gè)方法 一開(kāi)始以為也是使用上面的綁定方法,但是試了好多次都沒(méi)效果,,最后使用了另一種方式 → <% = MyReturn() %>,,加了一個(gè)等于號(hào),不是使用“#”,! ?、轉(zhuǎn)ataTable,DataSet等類型 Eval和DataBinder.Eval進(jìn)行數(shù)據(jù)綁定,! 這樣的數(shù)據(jù)綁定表達(dá)式只能用于Repeater,,GridView,DataList等等這些控件中,! 推薦文章:淺談.NET中的數(shù)據(jù)綁定表達(dá)式(一)
5.數(shù)據(jù)綁定表達(dá)式的演變 ?、俚谝环N:最常用的 “Eval”是很多人經(jīng)常在GridView,Repeater,,DataList等控件中使用最多的,! ②第二種:第一種方法的Father 這種寫法也比較常見(jiàn): <%# DataBinder.Eval(Container.DataItem,”max_lvl”,”{0:c}” ) %> Note:唯一要注意的是參數(shù)的選擇,! 第一種方法只是把第二種方法進(jìn)行簡(jiǎn)化,,底層還是會(huì)調(diào)用第二種方法的! ?、鄣谌N:性能最好的 如果是DataTable或DataSet類型必須要到用命名空間 → <%@ Import namespace="System.Data" %> <%# ((DataRowView)Container.DataItem)["age"]%> 也可以這樣寫: <%#(Container.DataItem as DataRowView)["ProductName"].ToString() %> 語(yǔ)法: ((DataRowView)(Container.DataItem))["列名"]/[列索引]的方式來(lái) 通用寫法: ((Type)(Container.DataItem)) + 后面是你要獲取的值 Note:Type是你的數(shù)據(jù)類型,,可以是集合,DataTable等等,! 演變歷程:第三種 → 第二種 → 第一種,,所以說(shuō)現(xiàn)在很多人還在用Eval進(jìn)行數(shù)據(jù)綁定,,學(xué)過(guò)數(shù)據(jù)綁定的人都知道使用第三種方式是最好的! 推薦文章:淺談.NET中的數(shù)據(jù)綁定表達(dá)式(一)
6.查看動(dòng)態(tài)編譯頁(yè)面的程序集,,有助于我們深入理解數(shù)據(jù)綁定底層原理 說(shuō)實(shí)話不知道怎么用專業(yè)術(shù)語(yǔ)來(lái)表達(dá),,我的理解就是 → 這個(gè)程序集是基于C#代碼和HTML的中間語(yǔ)言! 動(dòng)態(tài)程序集查看地址: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 找到程序集使用Reflector來(lái)查看程序集,,如果細(xì)致的看下去,,我相信你應(yīng)該有很大的收獲的! 推薦文章::深入ASP.NET數(shù)據(jù)綁定(上),,一步一步的帶你熟悉頁(yè)面編譯代碼,!
7.自定義數(shù)據(jù)綁定格式 這個(gè)想法來(lái)源于一個(gè)博友的創(chuàng)新idea!參考:教你30秒打造強(qiáng)類型ASP.NET數(shù)據(jù)綁定,! 其中有dudu大牛的改進(jìn)版:強(qiáng)類型ASP.NET數(shù)據(jù)綁定改進(jìn)版,,以及增強(qiáng)版:強(qiáng)類型ASP.NET數(shù)據(jù)綁定改進(jìn)版之第2版! 自定義代碼如下: 1 public static class DataBindHelper 前臺(tái)調(diào)用代碼示例: 1 <asp:Repeater ID="Repeater1" runat="server"> 通過(guò)自定義的數(shù)據(jù)綁定格式能更友好的實(shí)現(xiàn)數(shù)據(jù)綁定,! Note:最好在VS2010上面實(shí)驗(yàn),因?yàn)槲以?010和2008一樣的代碼,,運(yùn)行時(shí)2008就報(bào)錯(cuò)了,,“無(wú)效的表達(dá)式“>”,如果知道的朋友可以告訴我,! 8.淺談數(shù)據(jù)綁定底層機(jī)制 首先要記住在第七點(diǎn)中那句“page.GetDataItem()”代碼,,這句話可謂說(shuō)是數(shù)據(jù)綁定的核心了,它的意思就是 → 獲取綁定上下文堆棧頂部的對(duì)象,! 有人說(shuō)理解這個(gè)了,,數(shù)據(jù)綁定技術(shù)也就是理解80% - 90%了,所以下面我們就重點(diǎn)研究下他,! 說(shuō)白了就是從堆里面讀數(shù)據(jù),,只是微軟封裝的太厲害,只看到華麗的外表了,! 推薦文章:深入剖析了各個(gè)數(shù)據(jù)綁定表達(dá)式的性能問(wèn)題 → 淺談.NET中的數(shù)據(jù)綁定表達(dá)式(二) 9.最后來(lái)個(gè)總結(jié) 靈活運(yùn)行數(shù)據(jù)綁定技術(shù)可以加快開(kāi)發(fā)速度,,但千萬(wàn)不要濫用,在合適的場(chǎng)合運(yùn)行合適的數(shù)據(jù)綁定,,還有選擇合適的數(shù)據(jù)綁定格式也很重要,! 1 <%# DataBindHelper.Eval<People,string>(this,p=>p.Name)%> //定義數(shù)據(jù)綁定格式 其實(shí)如果大家認(rèn)真發(fā)現(xiàn),以及使用Reflector去查看源代碼,,就會(huì)知道“GetDataItem”這個(gè)方法其實(shí)是最重要的,,通過(guò)它去獲取綁定上下文堆棧頂部的對(duì)象,從而實(shí)現(xiàn)綁定,! 最后:大家如果跟著本文的步驟去一步步了解大牛們的文章,,我相信你對(duì)數(shù)據(jù)綁定一定會(huì)有很深入的理解的,! |
|