日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

与ObjectDataSource共舞

發(fā)布時(shí)間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 与ObjectDataSource共舞 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

4,ORM組件XCode(與ObjectDataSource共舞)

?

XCode為了能更方便的解決大部分問(wèn)題,不得不“屈身”于ObjectDataSource。

先上一個(gè)經(jīng)典例子(ObjectDataSource+GridView)(ObjectDataSource):

?

<asp:GridView?ID="GridView1"?runat="server"?AllowPaging="True"?AllowSorting="True"
????AutoGenerateColumns
="False"?DataKeyNames="ID"?DataSourceID="ObjectDataSource1"
????EnableModelValidation
="True">
????
<Columns>
????????
<asp:BoundField?DataField="ID"?HeaderText="ID"?InsertVisible="False"?ReadOnly="True"
????????????SortExpression
="ID"?/>
????????
<asp:BoundField?DataField="Name"?HeaderText="Name"?SortExpression="Name"?/>
????????
<asp:BoundField?DataField="ParentID"?HeaderText="ParentID"?SortExpression="ParentID"?/>
????????
<asp:BoundField?DataField="test"?HeaderText="test"?SortExpression="test"?/>
????????
<asp:BoundField?DataField="Description"?HeaderText="Description"?SortExpression="Description"?/>
????
</Columns>
</asp:GridView>
<asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?DataObjectTypeName="PurpleSun.Center.Area"
????DeleteMethod
="Delete"?EnablePaging="True"?InsertMethod="Insert"?OldValuesParameterFormatString="original_{0}"
????SelectCountMethod
="FindCountByName"?SelectMethod="FindAllByName"?SortParameterName="orderClause"
????TypeName
="PurpleSun.Center.Area"?UpdateMethod="Save">
????
<SelectParameters>
????????
<asp:Parameter?Name="name"?Type="String"?/>
????????
<asp:Parameter?Name="value"?Type="Object"?/>
????????
<asp:Parameter?Name="orderClause"?Type="String"?/>
????????
<asp:Parameter?Name="startRowIndex"?Type="Int32"?/>
????????
<asp:Parameter?Name="maximumRows"?Type="Int32"?/>
????
</SelectParameters>
</asp:ObjectDataSource>

?

?

下面用截圖演示整個(gè)過(guò)程:

拖GridView和ObjectDataSource

選中ObjectDataSource,注意右上角的智能標(biāo)記

配置數(shù)據(jù)源

這里只列出數(shù)據(jù)組件,為什么這里只有我們的Area類?為什么?我們看看實(shí)體類

就是DataObject特性起的作用,應(yīng)該說(shuō),所有加了該特性的類,都會(huì)被當(dāng)作數(shù)據(jù)組件在ObjectDataSource配置里面出現(xiàn)。當(dāng)然,不加DataObject特性也是可以的,但是在ObjectDataSource配置的時(shí)候,就不能勾選數(shù)據(jù)組件了,那樣會(huì)列出所有類(是的,所有類)。

選擇Area類,繼續(xù)

繼續(xù)猜測(cè),這里能列出這些方法,應(yīng)該也是有特性的,那就是DataObjectMethod特性啦。

第一個(gè)參數(shù)代表方法類型(查詢、插入、更新、刪除),第二個(gè)參數(shù)表示是否默認(rèn)方法,默認(rèn)方法會(huì)在配置ObjectDataSource時(shí)被默認(rèn)選中。

當(dāng)然啦,另外三個(gè)配置頁(yè)也是有的(這里以Update為例)

最后一步定義參數(shù),在這里就不定義了

可以看到,左邊已經(jīng)列出了前面選擇的Select方法的所有參數(shù)。

來(lái)看看一個(gè)神奇的地方

ObjectDataSource可以把查詢參數(shù)綁定到Cookie、控件、Request.Form、Request.QueryString、Session等。我們一般綁定到控件,做查詢的時(shí)候非常有用。每一個(gè)查詢項(xiàng)作為一個(gè)參數(shù),然后在這里綁定到對(duì)應(yīng)的控件;也經(jīng)常綁定到QueryString,比如表單頁(yè)面編輯數(shù)據(jù)的時(shí)候,這里綁定主鍵,然后就能把相應(yīng)的對(duì)象找出來(lái)。

這里神奇的地方就在于綁定。需要做復(fù)雜查詢的時(shí)候,可以在界面上放置查詢控件

然后編寫(xiě)一個(gè)對(duì)應(yīng)的查詢方法,當(dāng)然要加上DataObjectMethod特性了,然后在ObjectDataSource配置的時(shí)候把參數(shù)和控件綁定起來(lái)

(關(guān)于這類高級(jí)查詢后面專門(mén)介紹,這里僅僅是為了說(shuō)明綁定的神奇)

綁定的神奇就在于,界面控件問(wèn)數(shù)據(jù)源控件(如ObjectDataSource)要數(shù)據(jù)的時(shí)候,數(shù)據(jù)源控件開(kāi)始著手準(zhǔn)備參數(shù),反射讀取綁定控件的值作為參數(shù),并轉(zhuǎn)為相應(yīng)的類型,然后再反射調(diào)用實(shí)體類的查詢方法(如Search)。

到這里,ObjectDataSource的基本配置已經(jīng)完成,絕大多數(shù)ORM框架對(duì)ObjectDataSource的支持,也僅僅是到這里而已。而XCode的模型,是完全滿足ObjectDataSource要求的,下面繼續(xù)高級(jí)功能

這是ObjectDataSource控件屬性中的分頁(yè)類屬性,第一項(xiàng)啟用分頁(yè),第三項(xiàng)指定用于查詢所有記錄數(shù)的方法(前面提到過(guò)查詢方法是成對(duì)出現(xiàn)的,這里的FindAllByName和FindCountByName就是一對(duì)),至于第二項(xiàng)和第四項(xiàng),是不是很熟悉?

這兩個(gè)方法,一個(gè)返回實(shí)體集合,一個(gè)返回總行數(shù),而參數(shù)則是一摸一樣。這就是ObjectDataSource對(duì)分頁(yè)查詢的要求,如果沒(méi)有第二個(gè),ObjectDataSource也能提供查詢數(shù)據(jù)功能,但是就沒(méi)辦法分頁(yè)了。

回過(guò)頭了,仔細(xì)看看最后兩個(gè)參數(shù)的名稱,是不是跟ObjectDataSource屬性中的那兩個(gè)一摸一樣?所以,XCode使用這兩個(gè)名字作為參數(shù)名,正是這個(gè)原因。如果查詢方法使用的不是這兩個(gè)參數(shù),那么在配置ObjectDataSource的時(shí)候自己跟著改就是了。

這兩個(gè)參數(shù),第一個(gè)是從哪一行開(kāi)始讀數(shù)據(jù),第二個(gè)是返回的最大行數(shù),其實(shí)就是每頁(yè)行數(shù)。這種分頁(yè)結(jié)構(gòu),跟別的絕大部分分頁(yè)控件什么的都不相同。所以,并不是XCode的分頁(yè)另類,而是別的分頁(yè)才是另類,XCode是正統(tǒng)(哈哈)。

除了分頁(yè)屬性,再看看一個(gè)排序?qū)傩?

正是查詢方法的倒數(shù)第三個(gè)參數(shù)。GridView在排序的時(shí)候,會(huì)給這個(gè)參數(shù)傳遞ID Asc或Name Desc等。而查詢方法內(nèi)部,正是根據(jù)這個(gè)參數(shù),以及兩個(gè)分頁(yè)參數(shù),拼接SQL語(yǔ)句進(jìn)行查詢的。

至此,ObjectDataSource配置完成。打開(kāi)GridView的智能標(biāo)記,選擇ObjectDataSource控件作為數(shù)據(jù)源,GridView即可自動(dòng)生成列

當(dāng)然,這個(gè)列并不是數(shù)據(jù)庫(kù)字段,而是實(shí)體類的屬性。

在智能標(biāo)記面板上可以看到,啟用分頁(yè)和啟用排序可以勾選了,正是因?yàn)閯偛旁贠bjectDataSource中配置好了。都勾上!

運(yùn)行,看效果

界面很丑,不過(guò)那是美工的事情了。試試分頁(yè)(打開(kāi)OrmDebug開(kāi)關(guān),查看SQL語(yǔ)句)

執(zhí)行的SQL:

Select * From (Select row_number() over(Order By ID Desc) as row_number, * From Area) XCode_Temp_b Where row_Number Between 71 And 80

這是XCode生成的分頁(yè)語(yǔ)句,因?yàn)楝F(xiàn)在測(cè)試環(huán)境是SQL2008,隨意生成了row_number的分頁(yè),如果是別的數(shù)據(jù)庫(kù),就會(huì)不同了。但那是XCode的事情,開(kāi)發(fā)者不需要關(guān)心。

再試試在分頁(yè)的基礎(chǔ)上排序(點(diǎn)擊Name):

??? 執(zhí)行的SQL:

Select * From (Select row_number() over(Order By Name) as row_number, * From Area) XCode_Temp_b Where row_Number Between 81 And 90

??? 排序已經(jīng)改為Order By Name了,再點(diǎn)一次Name,執(zhí)行SQL:

Select * From (Select row_number() over(Order By Name DESC) as row_number, * From Area) XCode_Temp_b Where row_Number Between 81 And 90

??? 完全滿足要求!

?

??? BTW:GridView那里,其實(shí)還可以啟用編輯和刪除的,因?yàn)榕渲肙bjectDataSource的時(shí)候,默認(rèn)已經(jīng)配置了編輯和刪除的方法。

?

??? 最后,目的已經(jīng)達(dá)到,或許你還沒(méi)有發(fā)現(xiàn),到這里我們還沒(méi)有手工編寫(xiě)任何代碼呢!

?

??? XCode與ObjectDataSource共舞可以得到非常美的開(kāi)發(fā)效果,但是,上面的模式,已經(jīng)是三年前的做法了,我們現(xiàn)在有了更好的工業(yè)級(jí)的做法——批量生產(chǎn)

?

大石頭

新生命開(kāi)發(fā)團(tuán)隊(duì)

2010-08-24 13:25

轉(zhuǎn)載于:https://www.cnblogs.com/nnhy/archive/2010/09/13/1824669.html

總結(jié)

以上是生活随笔為你收集整理的与ObjectDataSource共舞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。