ASP.NET 2.0高级数据处理之数据绑定语法

asp.net|高级|数据|语法

  在前面的"模板中的数据绑定"部分中我们论述过,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" 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,特别是在不需要格式化字符串的情况下。

时间: 2024-10-03 12:48:49

ASP.NET 2.0高级数据处理之数据绑定语法的相关文章

ASP.NET 2.0高级数据处理之数据绑定

asp.net|高级|数据 在前面的"模板中的数据绑定"部分中我们论述过,ASP.NET包含了一种宣告式的数据绑定语法,用于在数据绑定模板中把数据源字段与控件的属性相关联.你也可以在代码中使用<%# ... >语法来进行任意值的数据绑定,例如页面和控件属性.集合.表达式,甚至于方法调用的返回结果.为了强制计算数据绑定的值,你必须在包含数据绑定语法的页面或控件上调用DataBind方法.下面的表格显示了ASP.NET中的数据绑定语法的一些例子. 单个属性 Customer:

ASP.NET2.0高级数据处理之数据绑定

本文详细介绍了ASP.NET 2.0高级数据处理中的数据绑定,包括有绑定语法,指定运行时所期望的数据类型:如何绑定到公共变量和页面的简单属性:如何绑定到另一个控件的属性:如何绑定到通用语言运行时集合类型:如何绑定到ArrayList:如何绑定到DataView等. 在前面的"模板中的数据绑定"部分中我们论述过,ASP.NET包含了一种宣告式的数据绑定语法,用于在数据绑定模板中把数据源字段与控件的属性相关联.你也可以在代码中使用<%# ... >语法来进行任意值的数据绑定,例

ASP.NET 2.0高级数据处理之冲突检测

asp.net|高级|数据 前面我们提到,数据绑定控件把传递给数据源的值存放在相互独立的Keys.Values(新值)和 OldValues字典中.在默认情况下,SqlDataSource和ObjectDataSource会忽略OldValues字段,只使用Keys和Values.这种行为是由数据源的ConflictDetection属性检测的,在默认情况下这个属性的值被设置为OverwriteChanges.OverwriteChanges模式意味着"为了更新或删除记录,仅仅匹配主键值&quo

ASP.NET 2.0高级数据处理之主从数据表

asp.net|高级|数据 在前面的文章中,我们已经知道如何将ControlParameter(控件参数)与GridView的SelectedValue属性相关联以实现主-从数据表.SelectedValue属性返回DataKeyNames属性所指定的第一个字段的值.你也可以给DataKeyNames属性指定多个用逗号分隔的字段值,例如,你可能需要把多个值传递到从表的数据源.这些额外的键字段值是通过SelectedDataKey属性暴露的,它返回一个DataKey对象,包含键字段的名称/值对(p

ASP.NET 2.0高级数据处理之处理Null值

asp.net|高级|数据 数据控件支持多种用于处理空值或缺失数据的方法.例如,GridView.FormView和DetailsView都支持EmptyDataText或EmptyDataTemplate属性,当数据源没有返回数据行的时候,你可以使用这些属性来指定控件显示的内容.我们只需要设置EmptyDataText和EmptyDataTemplate其中的一个(如果两个都设置了,EmptyDataTemplate会被重载).你也可以在绑定字段(和衍生的字段类型).模板字段或数据源参数对象上

ASP.NET 2.0高级数据处理之使用参数

你可以处理Select.Update.Insert.Delete和Filter的事件,以验证并处 理传递给这些操作的参数值.为了达到这个目标,数据绑定的控件和数据源控件 都暴露了适当的事件.例如,在GridView的Updating事件中,你就可以看到Keys .NewValues和OldValues字典中的参数名称和值,而它们将会被传递到数据源. 在数据源一端,你可以处理SqlDataSource的Updating事件,看到这些应用到下 层命令对象的参数,而这些命令将会执行以完成相关操作.类似

ASP.NET 2.0高级数据处理之处理控件事件

在前面的部分中,你已经看到了几个数据控件事件的例子.数据控件的事件 都是在页面执行生命周期的适当时候提供给你,供你插入自定义代码的.一般情 况下,在某种特定的操作发生之前和之后,数据控件都会暴露事件.在某种操作 之前调用的事件的名称一般带有-ing后缀,而在某种操作之后调用的事件的名称 一般带有-ed后缀.例如,GridView所支持的事件包括: · PageIndexChanging和PageIndexChanged - 在分页操作之前和之后引发 · SelectedIndexChanging

求ASP.NET 2.0高级编程(第4版) 英文

问题描述 如题求这书,最好是完整的如果没有完整的,要第一章也可以.谢谢 解决方案 解决方案二:第一章的http://www.shubulo.com/thread-35493-1-2.html

ASP.NET 2.0的新增服务、控件与功能

asp.net|控件 [导读]全文介绍了ASP.NET 2.0中新增的控件和功能,包括Master Pages,Data Source控件.Skin的支持.GridView和Details View的引入,在此基础上,ASP.NET 2.0的安全模型得到了极大的提高,包括登录控件.角色管理器.个性化等等方面的支持,在类库方面也增加了许多新特性,如全新的代码分隔模型.客户端回调等等,让读者对于ASP.NET的新特性有一个全面的了解. 在首次公诸于众以来的短短四年中,ASP.NET业已成为在Wind