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