ASP.NET界面数据绑定大大杂烩

 

  很久没有做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

 

 

 

 

 

 

 

posted @ 2009-12-14 16:59  岩仔  阅读(347)  评论(0编辑  收藏  举报