很久没有做Web的项目了,很多事情都已经忘记了。最近界面上要用到很多的数据绑定,由于要求很是相似,所以就用Ctrl+V做了很多的事情,可惜结果出乎意料,没有办法只能好好的研究一下数据绑定的资料了,网上的资料还真的很多,大致整理了一下,以备后用。
说明:
<%@ %>表示:引用
<%# %>表示:必须放在绑定控件中否则无效 //asp组件
<%= %>表示:可以访问.cs文件中的Public 和protected成员 //html组件
<% %>表示:里面执行的是服务器端的代码
常用数据绑定方法列表:
<%#Bind("Subject") %> //读写绑定字段
<%#Eval("[n]")%> //只读绑定字段
<%#Container.DataItemIndex + 1%> //实现自动编号
<%#DataBinder.Eval(Container.DataItem, "[n]") %> //只读绑定字段
TextBox.Text=’<%#UserName%>’ //控件属性绑定
datasource='<%#MyTable%>' //数据源绑定
注意: Eval 方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回
Bind方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。
ASP.NET (C#) Eval 和 Bind 的格式化
1.直接格式化
<%# DataBinder.Eval(Container.DataItem, "YourDateTime","{0:yyyy-MM-dd}") %>
<%# DataBinder.Eval(Container, "DataItem.YourDateTime","{0:yyyy-MM-dd}") %>
<%#Eval("YourDateTime","{0:yyyy-MM-dd}") %>
2.调用后台方法
<%# GetFormatStr(Eval("YourDataTime")) %>
3.String.Format()
<%#string.Format("{0:yyyy-MM-dd}",Eval("YourDataTime")) %>
备注:
ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fieldname)简化为Eval(fieldname)。Eval方法与DataBinder.Eval一样可以接受一个可选的格式化字符串参数。缩短的Eval语法与DataBinder.Eval的不同点在于,Eval会根据最近的容器对象(例如DataListItem)的DataItem属性来自动地解析字段,而DataBinder.Eval需要使用参数来指定容器。由于这个原因,Eval只能在数据绑定控件的模板中使用,而不能用于Page(页面)层使用。
DataBinder是System.Web里面的一个静态类,它提供了Eval方法用于简化数据绑定表达式的编写,但是它使用的方式是通过Reflection等开销比较大的方法来达到易用性,因此其性能并不是最好的。而Container则根本不是任何一个静态的对象或方法,它是ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量,其类型是可以进行数据绑定的控件的数据容器类型(如在Repeater内部的数据绑定容器叫RepeaterItem),在这些容器类中基本都有DataItem属性,因此你可以写Container.DataItem,这个属性返回的是你正在被绑定的数据源中的那个数据项。如果你的数据源是DataTable,则这个数据项的类型实际是DataRowView。可以这样的使用:
前台页面导入名称空间System.Data,否则会生成错误信息: <%@ Importnamespace="System.Data" %>
<%#((System.Data.DataRowView)Container.DataItem)["字段名"]%>
<%#((System.Data.DataRowView)Container.DataItem)[索引]%>
注意事项:
所有数据绑定表达式都必须包含在 <%# 和 %> 字符之间,而这个表达式说明的就是此代码是用作服务器端数据绑定用的。
在进行数据绑定的时候,如果你帮到到是控件的Text属性是,你必须写成Control.Text=’ <%# UserName %>’
使用时注意:1.注意字段名的大小写(要特别注意)。如果和查询的不一致,在某些情况下会导致比<%# DataBinder.Eval(Container.DataItem, "字段名") %>还要慢。2.如果想进一步提高速度,可采用<%# ((System.Data.DataRowView)Container.DataItem)[0] %>的方法。不过其可读性不高。
文章参考:
http://space.itpub.net/12639172/viewspace-481782
http://www.cnblogs.com/liuzijing688/archive/2008/03/27/1124623.html