eval和bind都是綁定datatable或者其他(集合,等)中的內容,那么他們有什么區別呢?性能方面怎么樣呢?eval有哪幾種用法呢?本文將做詳細介紹:
ASP.NET中的Eval和DataBinder.Eval方法
bind是雙向綁定,但需數據源可更改才能用。ASP.NET 2.0改善了模板中的數據綁定操作,把v1.x中的數據綁定語法DataBinder.Eval(Container.DataItem, fieldname)簡化為Eval(fieldname)。Eval方法與DataBinder.Eval一樣可以接受一個可選的格式化字符串參數??s短的Eval語法與DataBinder.Eval的不同點在于,Eval會根據最近的容器對象(例如DataListItem)的DataItem屬性來自動地解析字段,而DataBinder.Eval需要使用參數來指定容器。由于這個原因,Eval只能在數據綁定控件的模板中使用,而不能用于Page(頁面)層。當然,ASP.NET 2.0頁面中仍然支持DataBinder.Eval,你可以在不支持簡化的Eval語法的環境中使用它。
用法<%# Bind("Subject") %> //綁定字段
<%# Container.DataItemIndex + 1%> //實現自動編號
<%# Container.ItemIndex %> //Repeater自動編號
<%# 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()了
Eval用法
DataBinder.Eval范例
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
格式化字符串參數是可選的。如果忽略參數,DataBinder.Eval 返回對象類型的值,
//顯示兩位小數
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
格式:
{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} 貨幣樣式,標準英國貨幣樣式
顯示為£3,000.10
{0:c} 或 string.Format("{0:C}", price); 中國貨幣樣式
顯示為 ¥3,000.10
{0:c} 或 string.Format("{0:C}", price); 美國貨幣樣式
Eval(" ")綁定兩個字段:
CommandArgument=''<%#Eval("dyid").ToString()+Eval("dyid1").ToString()+… %>''這種形式就行
你把Eval("").ToString()當成一個普通字符串,而''<%# %>''保留就行,你高興怎么處理就怎么處理,
所有字符串的操作都有效,你還可以用靜態函數來處理這些字符串。
<asp:TextBox ID="TextBox5" runat="server" class="inputwidth100"
Text=''<%# Eval("RZMJ").ToString()+Eval("LDDW").ToString() %>''></asp:TextBox>
區別:
綁定表達式
<%# Eval("字段名") %>
<%# Bind("字段名") %>
區別 eval是只讀數據,Bind是可更新的.(可以讀取和寫入)
對于程序員來說最根本的區別是:
1.Bind是可更新的,是Bind綁定列可編輯,并且可以和數據源控件交互,直接和數據庫交互,但是用Bind的話,程序端的自定義操作就不能用了,比如Convert,ToString()等,或自己寫的函數,在程序端都不可以
2.eval是只讀數據,用eval的話不可以和數據源控件交互,是單向的,但是可以自定義操作
比如上面的<%# Eval("字段名").ToString().Trim()%>
本人從來和數據庫交互自己寫代碼,所以對我來說操作的Eval更方便,基本不用Bind,而且以前寫過,綁定泛型的時候
Bind都不支持嵌套類
下面接受啊<%%> <%= %>
<% %> 放在 HTML中寫后臺程序代碼.
<%= %> 放在HTML中輸出一個變量,表達式。。