|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了)Asp.net引进了一种新的声明数据绑定的语法。这类极为天真的语法同意开辟者不但绑定命据源,并且能够绑定复杂的属性、汇合、表达式、乃至是挪用办法所前往的了局。上面的列表显现了这类新语法的一些例子:
复杂属性
Customer:<%#custID%>
汇合
Orders:<asp:ListBoxid="List1"datasource=<%#
myArray%>runat="server">
表达式
Contact:<%#(customer.FirstName+""+customer.LastName
)%>
办法了局
OutstandingBalance:<%#GetBalance(custID)%>
只管这类语法看上往和asp中Response.Write的简写体例<%=%>很相似,但他们的运转机理却年夜不不异。Response.Write的简写语法在页面处置的时分求值,而asp.net数据绑定语法只要当挪用DataBind办法的时分才求值。
DataBind是Page和一切服务器控件的一个办法。当你对一个父控件挪用DataBind办法的时分,他所包括的子控件城市挪用DataBind办法。好比实行DataList1.DataBind(),DataList模板中的一切控件都援用了DataBind办法。在Page挪用DataBind办法---Page.DataBind()大概复杂的DataBind()---招致页面上一切的数据绑定表达式城市被求值。DataBind常常在Page_Load事务中被挪用,好比上面的例子:
protectedvoidPage_Load(ObjectSrc,EventArgsE){
DataBind();
}
你几近能够在.aspx页面中声明部分的任何中央利用数据绑定表达式,在运转时供应它所盘算的预期的数据范例。当求值今后,复杂的属性、表达式和上例中的办法,将向用户显现文本。在这些情形下,数据绑定表达式必需求出一个string范例的值。在汇合的例子中,数据绑定表达式所求值的范例,关于ListBox的DataSource属性来讲是无效的。你会发明,在数据绑定表达式中为了失掉希冀的了局,强迫转换了局值的范例,是很有需要的。比方,假如count是一个整数:
NumberofRecords:<%#count.ToString()%>
绑定复杂属性
Asp.net数据绑定语法撑持绑定页面的大众变量和属性,和页面上其他控件的属性。
上面的例子申明了绑定到页面的大众变量和复杂属性。注重这些值在挪用DataBind()之前已被初始化。
绑定汇合和列表
列表服务器控件,如DataGrid、ListBox和HTMLSelect,利用汇合作为数据源。上面的例子申明绑定到经常使用的CLR汇合范例。这些控件只能绑定到撑持IEnumerable,ICollection,或IListSource接口的汇合。一般,您能够绑定到ArrayList、Hashtable、DataView和DataReader.
良多时分,在绑定到页面或把持之前,你大概会操纵这些数据。
DataBinder.Eval办法
Asp.net框架供应了一个静态办法DataBinder.Eval,能够盘算前期数据绑定表达式的值,并能够将了局恣意格局化为字符串。DataBinder.Eval是很便利的,他扫除了很多开辟职员必需作的(经由过程强迫改动值的范例来失掉预期的数据范例)显式转换。特别是在带有模板列表的数据绑定控件中,由于常常必要显式转换数据行和数据字段,以是它出格有效。
细心看上面的代码,整数将被显现为泉币型字符串。利用尺度的asp.net数据绑定语法,为了失掉数据字段IntegerValue,你必需起首显式转换数据行的范例,然后作为String.Format办法的参数才干失掉了局
<%#String.Format("{0:c}",((DataRowView)Container.DataItem)["IntegerValue"])%>
如许的语法其实扑朔迷离的难以影象。对照而言,DataBinder.Eval就很复杂了。它带有三个参数:数据项的定名容器、数据字段称号和格局化字符串。在模板列表如DataList、DataGrid、或Repeater,定名容器老是Container.DataItem。Page是另外一个能够被DataBinder.Eval利用的定名容器。
<%#DataBinder.Eval(Container.DataItem,"IntegerValue","{0:c}")%>
格局化字符串参数是可选的。假如疏忽参数,DataBinder.Eval前往工具范例的值,就象上面的代码如许:
<%#(bool)DataBinder.Eval(Container.DataItem,"BoolValue")%>
很主要的一点必要注重:因为受前期绑定影响,DataBinder.Eval与尺度的数据绑定语法比拟,在实行效力上有分明的不同。因而有选择地利用DataBinder.Eval,出格是不必要对字符串举行格局化的时分。
刚刚打开这篇专题,猛然见到HAL9000发表的《对于大型公司项目平台选择j2ee的几层认识》系列,深受启发。 |
|