ASP.NET DataBinder.Eval()方法的使用简介

转帖:http://hi.baidu.com/zhouyankaixin/blog/item/a76dc6381f01c12596ddd8ae.html

<%# Bind("Subject") %> //绑定字段

<%# Container.DataItemIndex + 1%> //实现自动编号

<%# DataBinder.Eval(Container.DataItem, "[n]") %>

 

通常使用的方法

<%# DataBinder.Eval(Container.DataItem, "ColumnName") %>

<%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %>

<%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %>

 

其他用法

<%# ((DataRowView)Container.DataItem)["ColumnName"] %>

<%# ((DataRowView)Container.DataItem).Row["ColumnName"] %>

<%# ((DataRowView)Container.DataItem)["adtitle"] %>

<%# ((DataRowView)Container.DataItem)[n] %>

<%# ((DbDataRecord)Container.DataItem)[0] %>

<%# (((自定义类型)Container.DataItem)).属性.ToString() %>//如果属性为字符串类型就不用ToString()

 

DataBinder.Eval用法范例

<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>

格式化字符串参数是可选的。如果忽略参数,DataBinder.Eval 返回对象类型的值,

 

//显示二位小数

<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>

//{0:G}代表显示TrueFalse

<ItemTemplate>

<asp:Image Width="12" Height="12" Border="0" runat="server"

AlternateText='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %>'

ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %>' />

</ItemTemplate>

//转换类型

((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)

{0:d} 日期只显示年月日

{0:yyyy-mm-dd} 按格式显示年月日

{0:c} 货币样式

<%#Container.DataItem("price","{0:#,##0.00}")%>

<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>

 

 

Specifier Type      Format    Output (Passed Double 1.42)   Output (Passed Int -12400)

c   Currency         {0:c}      $1.42      -$12,400

d   Decimal          {0:d}     System.FormatException   -12400

e   Scientific       {0:e}     1.420000e+000     -1.240000e+004

f   Fixed point      {0:f}   1.42     -12400.00

g   General          {0:g}   1.42      -12400

n   Number with commas for thousands   {0:n}   1.42      -12,400

r   Round trippable     {0:r}   1.42      System.FormatException

x   Hexadecimal     {0:x4}   System.FormatException    cf90

 

 

{0:d} 日期只显示年月日

{0:yyyy-mm-dd} 按格式显示年月日

 

 

样式取决于 Web.config 中的设置

 

{0:c}   {0:0,000.00} 货币样式   标准英国货币样式

<system.web>

      <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" />

</system.web>

显示为 3,000.10

 

{0:c}   string.Format("{0:C}", price); 中国货币样式

<system.web>

      <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-cn" uiCulture="zh-cn" />

</system.web>

显示为 3,000.10

 

{0:c}   string.Format("{0:C}", price); 美国货币样式

<system.web>

      <globalization requestEncoding="utf-8" responseEncoding="utf-8" />

</system.web>

显示为 $3,000.10

 

DataBinder.Eval(Container.DataItem,"Name")Container.DataItem("Name")有什么区别?DataBinderSystem.Web里面的一个静态类,它提供了Eval方法用于简化数据绑定表达式的编写,但是它使用的方式 是通过Reflection等开销比较大的方法来达到易用性,因此其性能并不是最好的。而Container则根本不是任何一个静态的对象或方法,它是 ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量,其类型是可以进行数据绑定的控件的数据容器类型(如在Repeater内部的数据绑 定容器叫RepeaterItem),在这些容器类中基本都有DataItem属性,因此你可以写Container.DataItem,这个属性返回的 是你正在被绑定的数据源中的那个数据项。如果你的数据源是DataTable,则这个数据项的类型实际是DataRowView

DataBinder.eval 绑定不必关心数据来源(Datareaddataset)。不必关心数据的类型eval会把这个数据对象转换为一个字符串。在底层绑定做了很多工作,使 用了反射性能。正因为使用方便了,但却影响了数据性能。当于dataset绑定时,DataItem其实式一个DataRowView(如果绑定的是一个 数据读取器(dataread)它就是一个IdataRecord。)因此直接转换成DataRowView的话,将会给性能带来很大提升。

使用时注意:1.注意字段名的大小写(要特别注意)。如果和查询的不一致,在某些情况下会导致比<%# DataBinder.Eval(Container.DataItem, "字段名") %>还要慢。2.如果想进一步提高速度,可采用<%# ((System.Data.DataRowView)Container.DataItem)[0] %>的方法。不过其可读性不高。

//DataSet做数据源时

//正常情况(C#)

<%# ((System.Data.DataRowView)Container.DataItem)["Title"] %>

 

//绑定日期字段格式字符串

<%# Convert.ToDateTime(((System.Data.DataRowView)Container.DataItem)

["FbTime"]).ToString("yyyyMMdd") %>

<%# DataBinder.Eval(Container, "DataItem.FbTime","{0:yyyyMMdd}") %>

 

//字符串绑定超过指定长度截断

<%# DataBinder.Eval(Container.DataItem, "Text").ToString().Trim().Length>7?

DataBinder.Eval(Container.DataItem, "Text").ToString().Trim().Substring

(0,7):DataBinder.Eval(Container.DataItem, "Text").ToString().Trim() %>

 

//价格格试化为2位小数

 

<%# Convert.ToDecimal(((System.Data.DataRowView)Container.DataItem) ["Price"]).ToString("F2") %>

 

<%# DataBinder.Eval(Container, "DataItem.Price","{0:F2}") %>

你可能感兴趣的:(null,asp.net,border,编译器,dataset,output)