|
1、為什么ASP.NET 2.0中的數(shù)據(jù)綁定控件不需要寫代碼就能完成更新、刪除、新建等數(shù)據(jù)操作?
ASP.NET 1.x時(shí),DataGrid等控件使用DataBinder.Eval(Container.DataItem,"ColumnName")這樣的表達(dá)式可以將數(shù)據(jù)源中的數(shù)據(jù)綁定到控件上,但并不能在更新數(shù)據(jù)時(shí)自動(dòng)將控件中的新值取出,更新回?cái)?shù)據(jù)庫(kù)。所以ASP.NET 2.0中的數(shù)據(jù)綁定分為兩種:?jiǎn)蜗驍?shù)據(jù)綁定(即表達(dá)式或ReadOnly設(shè)為True的BoundField,只提供從數(shù)據(jù)源到控件的數(shù)據(jù)綁定)和雙向數(shù)據(jù)綁定(,不但可以將數(shù)據(jù)從數(shù)據(jù)源綁定到控件,而且可以在操作數(shù)據(jù)時(shí)將控件中的數(shù)據(jù)提供給數(shù)據(jù)源控件),所以ASP.NET 2.0操作數(shù)據(jù)時(shí)就不需要寫大量e.Item.FindControl()這樣的代碼了。
2、在Update和Insert過(guò)程中,GridView/DetailsView/FormView是如何把值傳遞給數(shù)據(jù)源控件,以便數(shù)據(jù)源控件完成數(shù)據(jù)操作方法的調(diào)用的?
更新時(shí),GridView會(huì)提供兩套值給數(shù)據(jù)源控件,一套新值,匯集所有ReadOnly不為True的列的值和模板中所有表達(dá)式的值,另一套舊的值,則從當(dāng)前行對(duì)應(yīng)的DataKey中獲得(DataKey的值在綁定數(shù)據(jù)時(shí)就會(huì)被GridView保存到視圖狀態(tài)中),可以在GridView的Updating事件處理程序中看到這一特征。舊的那套值提供給數(shù)據(jù)源控件后,它的Key會(huì)被數(shù)據(jù)源控件根據(jù)OldValuesParameterFormatString重命名。比如,GridView中的DataKeyNames設(shè)為ProductID,數(shù)據(jù)源控件的OldValuesParameterFormatString為original_{0},那么GridView在更新時(shí)傳給數(shù)據(jù)源控件的參數(shù)中就會(huì)有一個(gè)original_ProductID。
新的那套值和老的那套值合起來(lái)要?jiǎng)偤煤蛿?shù)據(jù)源控件需要的參數(shù)列表相匹配,不能多也不能少,這是初學(xué)者使用GridView更新數(shù)據(jù)時(shí)遇到最多的問(wèn)題。
實(shí)際使用過(guò)程中如果主鍵列對(duì)應(yīng)的參數(shù)(比如,ProductID),沒(méi)有像Strong named Dataset那樣取名為original_ProductID,則需要更改數(shù)據(jù)源的OldValuesParameterFormatString,比如改成{0},這樣才能和實(shí)現(xiàn)方法的參數(shù)對(duì)應(yīng)起來(lái)。
3、如何實(shí)現(xiàn)開(kāi)放式并發(fā)?
開(kāi)放式并發(fā)的更新和刪除語(yǔ)句會(huì)有一個(gè)很長(zhǎng)的where 子句,比如:
update Table1 set Column1 = @Column1 , Column2 = @Column2 where ID = @original_ID and Column1 = @orignal_Column1 and Column2 = @original_Column2;
NET技術(shù):在ASP.NET 2.0中數(shù)據(jù)綁定的實(shí)現(xiàn)方法,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。