熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 10:29:52  來源: .NET編程 
在前面的模板中的數據綁定部分中我們論述過ASPNET包含了一種宣告式的數據綁定語法用於在數據綁定模板中把數據源字段與控件的屬性相關聯你也可以在代碼中使用<%# >語法來進行任意值的數據綁定例如頁面和控件屬性集合表達式甚至於方法調用的返回結果為了強制計算數據綁定的值你必須在包含數據綁定語法的頁面或控件上調用DataBind方法下面的表格顯示了ASPNET中的數據綁定語法的一些例子

單個屬性 Customer: <%# custID %> 集合 Orders <asp:ListBox id=List datasource=<%# myArray %> runat=server> 表達式 Contact <%# ( customerFirstName + + customerLastName ) %> 方法的返回值 Outstanding Balance: <%# GetBalance(custID) %>  
  盡管上面的語法與ASP的ResponseWrite便捷語法(<%= %>)看起來類似但是它們的行為卻決然不同ASP ResponseWrite便捷語法在頁面處理的時候計算值而ASPNET數據綁定語法只在DataBind方法被調用的時候才計算值

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

Number of Records: <%# countToString() %>
  ASPNET數據綁定語法支持公共變量頁面的屬性和頁面中其它控件的屬性的綁定下面的例子演示了如何綁定到公共變量和頁面的簡單屬性請注意在DataBind()被調用之前這些值都已經初始化過了

<script language=VB runat=server
Sub Page_Load(sender As Object e As EventArgs)
 PageDataBind
End Sub

ReadOnly Property custID() As String
 Get
  Return ALFKI
 End Get
End Property

ReadOnly Property orderCount() As Integer
 Get
  Return
 End Get
End Property
</script>
<form action=DataBind_vbaspx 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=Button Text=Submit OnClick=SubmitBtn_Click runat=server/>
Selected State: <asp:label ID=Label text=<%# StateListSelectedItemText %> runat=server/>  列表類型的服務器控件(例如DropDownListListBox和HTMLSelect)把集合作為數據源下面的例子演示如何綁定到通用語言運行時集合類型這些控件只能綁定到支持IenumerableIcollection或IlistSource接口的集合更為常見的是它可以綁定到ArrayListHashtableDataView和DataReader下面的例子演示了如何綁定到ArrayList

Sub Page_Load(sender As Object e As EventArgs)
If Not IsPostBack Then
 Dim values as ArrayList= new ArrayList()
 valuesAdd (IN)
 valuesAdd (KS)
 valuesAdd (MD)
 valuesAdd (MI)
 valuesAdd (OR)
 valuesAdd (TN)

 DropDownDataSource = values
 DropDownDataBind
End If
End Sub

  下面的例子演示了如何綁定到DataView請注意DataView類是在SystemData名字空間中定義的


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
  dtColumnsAdd(New DataColumn(IntegerValue GetType(Integer)))
  dtColumnsAdd(New DataColumn(StringValue GetType(String)))
  dtColumnsAdd(New DataColumn(DateTimeValue GetType(DateTime)))
  dtColumnsAdd(New DataColumn(BooleanValue GetType(Boolean)))

  填充一些數據

  For i = To
   dr = dtNewRow()
   dr() = i
   dr() = Item + iToString()
   dr() = DateTimeNowToShortTimeString
   If (i Mod <> ) Then
    dr() = True
   Else
    dr() = False
   End If
   把數據行添加到表
   dtRowsAdd(dr)
  Next

  GridViewDataSource = New DataView(dt)
  GridViewDataBind()
 End If
End Sub
  下面的例子演示了如何綁定到Hashtable

Sub Page_Load(sender As Object e As EventArgs)
 If Not IsPostBack Then
 
  Dim h As Hashtable = new Hashtable()
  hAdd (key value)
  hAdd (key value)
  hAdd (key value)

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

Sub Page_Load(sender As Object e As EventArgs)
 If Not IsPostBack Then
  Dim values as ArrayList= new ArrayList()

  valuesAdd ()
  valuesAdd ()
  valuesAdd ()
  valuesAdd ()
  valuesAdd ()
  valuesAdd ()
  valuesAdd ()

  DataListDataSource = values
  DataListDataBind
 End If
End Sub

Function EvenOrOdd(number As Integer) As String
 If (number Mod <> ) Then
  Return Odd
 Else
  Return Even
 End If
End Function

<asp:DataList id=DataList ……>
<ItemTemplate>
 Number Value: <%# ContainerDataItem %>
 Even/Odd: <%# EvenOrOdd(ContainerDataItem) %>
</ItemTemplate>
</asp:DataList>

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

  看看下面的例子它需要把整數顯示為貨幣字符串在標准的ASPNET數據綁定語法中你必須首先轉換數據行的類型以檢索數據字段IntegerValue接著把它作為參數傳遞給StringFormat方法


<%# StringFormat({:c} (CType(ContainerDataItem DataRowView)(IntegerValue))) %>
  這個語法很復雜並且不容易記住與此形成對照的是DataBinderEval是一個簡單的方法它只有三個參數數據項的命名容器(naming container)數據字段名稱和格式化字符串在模板化的控件(例如FormView GridViewDetailsViewDataList或Repeater)中命名容器都是ContainerDataItem頁面(Page)是另一種命名容器也可以用於DataBinderEval前面我們提到ASPNET 為DataBinderEval提供了一個新的簡化的語法(Eval)你可以在數據綁定的控件模板中使用它來自動解析ContainerDataItem

<%# DataBinderEval(ContainerDataItem IntegerValue {:c}) %>
<%# Eval(IntegerValue {:c}) %>
  格式化字符串參數是可選的如果省略了這個參數DataBinderEval會返回Object類型值如下所示

<%# CType(DataBinderEval(ContainerDataItem BoolValue) Boolean) %>
  我們要重點注意的是與標准的數據綁定語法相比DataBinderEval會明顯地影響性能這是因為它使用了延遲綁定的反射(reflection)請明智地使用DataBinderEval特別是在不需要格式化字符串的情況下


From:http://tw.wingwit.com/Article/program/net/201311/13817.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.