| ASP.NET 2.0高级数据处理之数据绑定(2) |
|
| 作者:- 来源:来自互联网 时间:2008-1-7 11:11:27 『 字号:大 中 小 』
|
|
|
|
下面的例子演示了如何绑定到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,特别是在不需要格式化字符串的情况下。 |
|
上一篇文章: ASP.NET 2.0高级数据处理之数据绑定(1) 下一篇文章: Orcale与Asp.net的端口冲突 |
| 【发表评论】【打印本文】【关闭窗口】 |
| |