国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET 2.0高級數據處理之數據綁定

2024-07-10 13:08:59
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  •   在前面的"模板中的數據綁定"部分中我們論述過,asp.net包含了一種宣告式的數據綁定語法,用于在數據綁定模板中把數據源字段與控件的屬性相關聯。你也可以在代碼中使用<%# ... >語法來進行任意值的數據綁定,例如頁面和控件屬性、集合、表達式,甚至于方法調用的返回結果。為了強制計算數據綁定的值,你必須在包含數據綁定語法的頁面或控件上調用databind方法。下面的表格顯示了asp.net中的數據綁定語法的一些例子。

    單個屬性customer: <%# custid %>
    集合 orders<asp:listbox id="list1" datasource='<%# myarray %>' runat="server">
    表達式 contact<%# ( customer.firstname + " " + customer.lastname ) %>
    方法的返回值outstanding balance: <%# getbalance(custid) %>
      
      盡管上面的語法與asp的response.write便捷語法(<%= %>)看起來類似,但是它們的行為卻決然不同。asp response.write便捷語法在頁面處理的時候計算值,而asp.net數據綁定語法只在databind方法被調用的時候才計算值。

      databind是頁面和所有務器控件的一個方法。當你調用父控件的databind的時候,它會依次調用所有子控件的databind方法。例如,datalist1.databind()就會調用datalist模板中的所有控件的databind方法。調用頁面的databind方法--page.databind() 或簡單地調用 databind()--會引發頁面上所有的數據綁定表達式的計算操作。通常只在頁面的page_load事件中調用databind方法,如下面的例子所示。
    在.aspx頁面的任何宣告式片斷中,你都可以使用綁定語法,并為它的估值指定運行時所期望的數據類型。上面例子中的簡單屬性、表達式和方法在被計算的時候會向用戶顯示文本內容。在這種情況下,數據綁定表達式的值是string類型的。在上面的集合例子中,數據綁定語法的值的類型是listbox的datasource屬性。你會發現在綁定表達式中強制轉換值的類型對于生成期望的結果是必要的。例如,如果count是一個整數:

    number of records: <%# count.tostring() %>

      asp.net數據綁定語法支持公共變量、頁面的屬性和頁面中其它控件的屬性的綁定。下面的例子演示了如何綁定到公共變量和頁面的簡單屬性。請注意,在databind()被調用之前,這些值都已經初始化過了。

    <script language="vb" runat="server">
    sub page_load(sender as object, e as eventargs)
     page.databind
    end sub

    readonly property custid() as string
     get
      return "alfki"
     end get
    end property

    readonly property ordercount() as integer
     get
      return 11
     end get
    end property
    </script>
    <form action="databind1_vb.aspx" runat="server">
    customer: <b><%# custid %></b><br />
    open orders: <b><%# ordercount %></b>
    </form>

      下面的例子演示如何綁定到另一個控件的屬性:

    <asp:dropdownlist id="statelist" runat="server">
    <asp:listitem>ca</asp:listitem>
    ……
    </asp:dropdownlist>

    <asp:button id="button1" text="submit" onclick="submitbtn_click" runat="server"/>
    selected state: <asp:label id="label1" text='<%# statelist.selecteditem.text %>' runat="server"/>

      列表類型的服務器控件(例如dropdownlist、listbox和htmlselect)把集合作為數據源。下面的例子演示如何綁定到通用語言運行時集合類型。這些控件只能綁定到支持ienumerable、icollection或ilistsource接口的集合。更為常見的是,它可以綁定到arraylist、hashtable、dataview和datareader。下面的例子演示了如何綁定到arraylist。

    sub page_load(sender as object, e as eventargs)
    if not ispostback then
     dim values as arraylist= new arraylist()
     values.add ("in")
     values.add ("ks")
     values.add ("md")
     values.add ("mi")
     values.add ("or")
     values.add ("tn")

     dropdown1.datasource = values
     dropdown1.databind
    end if
    end sub

      下面的例子演示了如何綁定到dataview。請注意dataview類是在system.data名字空間中定義的。

    sub page_load(sender as object, e as eventargs)
     if not ispostback then
      dim dt as datatable
      dim dr as datarow
      dim i as integer

      '建立datatable
      dt = new datatable
      dt.columns.add(new datacolumn("integervalue", gettype(integer)))
      dt.columns.add(new datacolumn("stringvalue", gettype(string)))
      dt.columns.add(new datacolumn("datetimevalue", gettype(datetime)))
      dt.columns.add(new datacolumn("booleanvalue", gettype(boolean)))

      '填充一些數據

      for i = 1 to 9
       dr = dt.newrow()
       dr(0) = i
       dr(1) = "item " + i.tostring()
       dr(2) = datetime.now.toshorttimestring
       if (i mod 2 <> 0) then
        dr(3) = true
       else
        dr(3) = false
       end if
       '把數據行添加到表
       dt.rows.add(dr)
      next

      gridview1.datasource = new dataview(dt)
      gridview1.databind()
     end if
    end sub

      下面的例子演示了如何綁定到hashtable。

    sub page_load(sender as object, e as eventargs)
     if not ispostback then
     
      dim h as hashtable = new hashtable()
      h.add ("key1", "value1")
      h.add ("key2", "value2")
      h.add ("key3", "value3")

      mydatalist.datasource = h
      mydatalist.databind
     end if
    end sub

      通常情況下,你可能希望綁定到頁面或控件之前先處理數據。下面的例子演示了如何綁定到表達式和方法的返回值。

    sub page_load(sender as object, e as eventargs)
     if not ispostback then
      dim values as arraylist= new arraylist()

      values.add (0)
      values.add (1)
      values.add (2)
      values.add (3)
      values.add (4)
      values.add (5)
      values.add (6)

      datalist1.datasource = values
      datalist1.databind
     end if
    end sub

    function evenorodd(number as integer) as string
     if (number mod 2 <> 0) then
      return "odd"
     else
      return "even"
     end if
    end function

    <asp:datalist id="datalist1" ……>
    <itemtemplate>
     number value: <%# container.dataitem %>
     even/odd: <%# evenorodd(container.dataitem) %>
    </itemtemplate>
    </asp:datalist>

      asp.net頁面框架組件提供了一個靜態的方法,它估算延遲綁定(late-bound)的數據綁定表達式并可以選擇把其結果格式化為字符串。在這種情況下,databinder.eval很方便,因為它消除了開發者把估值轉會為期望的數據類型所必須執行的很多顯式轉化工作。當模板化列表中有數據綁定控件的時候,它特別有用處,因為在那種情況下,通常數據行和數據字段都必須轉換。

      看看下面的例子,它需要把整數顯示為貨幣字符串。在標準的asp.net數據綁定語法中,你必須首先轉換數據行的類型以檢索數據字段integervalue。接著把它作為參數傳遞給string.format方法。

    <%# string.format("{0:c}", (ctype(container.dataitem, datarowview)("integervalue"))) %>

      這個語法很復雜并且不容易記住。與此形成對照的是,databinder.eval是一個簡單的方法,它只有三個參數:數據項的命名容器(naming container)、數據字段名稱和格式化字符串。在模板化的控件(例如formview、 gridview、detailsview、datalist或repeater)中,命名容器都是container.dataitem。頁面(page)是另一種命名容器,也可以用于databinder.eval。前面我們提到,asp.net 2.0為databinder.eval提供了一個新的簡化的語法(eval),你可以在數據綁定的控件模板中使用它來自動解析container.dataitem。

    <%# databinder.eval(container.dataitem, "integervalue", "{0:c}") %>
    <%# eval("integervalue", "{0:c}") %>

      格式化字符串參數是可選的。如果省略了這個參數,databinder.eval會返回object類型值,如下所示:

    <%# ctype(databinder.eval(container.dataitem, "boolvalue"), boolean) %>

      我們要重點注意的是,與標準的數據綁定語法相比,databinder.eval會明顯地影響性能,這是因為它使用了延遲綁定的反射(reflection)。請明智地使用databinder.eval,特別是在不需要格式化字符串的情況下。
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 随州市| 工布江达县| 化州市| 钟山县| 板桥市| 泸州市| 嘉善县| 双柏县| 娄底市| 贵定县| 鹤岗市| 修武县| 汶上县| 清水河县| 鞍山市| 北辰区| 雅安市| 兴隆县| 玛多县| 咸丰县| 甘孜县| 峨山| 镇江市| 邵阳县| 同德县| 中阳县| 兴国县| 海口市| 商南县| 太白县| 怀远县| 莆田市| 明水县| 成安县| 嘉峪关市| 永寿县| 峨眉山市| 交城县| 府谷县| 彩票| 上思县|