久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

學(xué)習(xí)之路七:一步一步學(xué)習(xí)ASP.NET數(shù)據(jù)綁定

 仰望//45度微笑 2012-04-23

                        

   ?、俦磉_(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版

    自定義代碼如下:    

復(fù)制代碼
1 public static class DataBindHelper
2 {
3 public static TResult Eval<TEntity, TResult>(this Page page, Func<TEntity, TResult> func)
4 {
5 var item = page.GetDataItem(); //這就是核心代碼
6 return func((TEntity)item);

7 }
8 }
復(fù)制代碼

    前臺(tái)調(diào)用代碼示例:    

1      <asp:Repeater ID="Repeater1" runat="server">
2 <ItemTemplate>
3 <%# DataBindHelper.Eval<People,string>(this,p=>p.Name)%>
4 </ItemTemplate>
5 </asp:Repeater>

    通過(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ù)綁定格式也很重要,!    

復(fù)制代碼
1           <%# DataBindHelper.Eval<People,string>(this,p=>p.Name)%>   //定義數(shù)據(jù)綁定格式
2 <%# DataBinder.GetDataItem("Name") %>
3 <%# ((People)GetDataItem()).Name %>
4 <%# ((People)Container.DataItem).Name %>
5 <%# Eval("Name") %>
6 <%# DataBinder.Eval(Container.DataItem,"Name","") %>
7 <%# ((System.Data.DataRowView)GetDataItem())[0] %>
8 <%# ((System.Data.DataRowView)Container.DataItem)[0] %>
復(fù)制代碼

    其實(shí)如果大家認(rèn)真發(fā)現(xiàn),以及使用Reflector去查看源代碼,,就會(huì)知道“GetDataItem”這個(gè)方法其實(shí)是最重要的,,通過(guò)它去獲取綁定上下文堆棧頂部的對(duì)象,從而實(shí)現(xiàn)綁定,!


  最后:大家如果跟著本文的步驟去一步步了解大牛們的文章,,我相信你對(duì)數(shù)據(jù)綁定一定會(huì)有很深入的理解的,!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多