asp.net的eval,bind,container.dateitem,數(shù)據(jù)綁定的研究
首先,eval與bind是兩個(gè)方法,都可以實(shí)現(xiàn)前臺(tái)數(shù)據(jù)綁定
Bind方法(雙向數(shù)據(jù)綁定)即能把數(shù)據(jù)綁定到控件,又能把數(shù)據(jù)變更提交到數(shù)據(jù)庫。
Eval方法(單向數(shù)據(jù)綁定)它實(shí)現(xiàn)了數(shù)據(jù)讀取的自動(dòng)化,并能對(duì)綁定字段進(jìn)行格式化顯示,但是沒有實(shí)現(xiàn)數(shù)據(jù)寫入自動(dòng)化。
比如,當(dāng)有GridView、DetailsView控件的時(shí)候,Bind方法可以使控件從模板中的子控件中提取值,并將這些值傳遞給數(shù)據(jù)源控件。然后數(shù)據(jù)源控件將執(zhí)行適當(dāng)?shù)臄?shù)據(jù)庫命令。所以在數(shù)據(jù)綁定控件的EditItemTemplate或InsertItemTemplate中要使用Bind函數(shù)。
其次,在進(jìn)行數(shù)據(jù)綁定的時(shí)候,可以用DataBinder.Eval或者直接用Container.DataItem
DataBinder.Eval(Container.DataItem, "字段")
DataBinder.Eval(Container, "DataItem.字段")
/********************************************/
((對(duì)象類型)Container.DataItem).屬性
如果是GridView,Repeat,DataList等
就是((DataRowView)Container.DataItem).Row["字段名"]
如果是SqlDataReader
就是((DbDataRecord)Container.DataItem)["字段名"]
下面就來看看這兩種數(shù)據(jù)綁定的區(qū)別
Eval是通過反射的方式來獲取值,而Container則是ASP.NET頁面編譯器在數(shù)據(jù)綁定事件處理程序內(nèi)部聲明的局部變量,里面存有值。
這樣看來,用Container效率應(yīng)該比較高,但是有一網(wǎng)友做了一組這樣的測(cè)試
1.<@% DataBinder.Eval(Container.DataItem, "ColumnName") %>
2.<@% DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
3.<@% DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
4.<@% ((DataRowView)Container.DataItem)["ColumnName"] %>
5.<@% ((DataRowView)Container.DataItem).Row["ColumnName"] %>
來看哪個(gè)效率高,得出的結(jié)論是前三種由于用了反射,所以效率不高,但是第四種在某些情況下效率更低,第五種是一種比較合適的寫法
參考的文章:
數(shù)據(jù)綁定以及Container.DataItem的具體分析
http://space.itpub.net/12639172/viewspace-481782
Eval 和 Bind 方法的區(qū)別
http://www.rzrgm.cn/dupeng0811/archive/2009/03/23/1419600.html
數(shù)據(jù)綁定以及Container.DataItem幾種方式與用法分析
http://www.diybl.com/course/4_webprogram/asp.net/netjs/200847/108607.html
請(qǐng)問Bind ,Eval有說明區(qū)別?大家來討論討論
http://faq.csdn.net/read/216609.html

浙公網(wǎng)安備 33010602011771號(hào)