日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

与ObjectDataSource共舞

發布時間:2023/11/27 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 与ObjectDataSource共舞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

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

先上一個經典例子(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>

?

?

下面用截圖演示整個過程:

拖GridView和ObjectDataSource

選中ObjectDataSource,注意右上角的智能標記

配置數據源

這里只列出數據組件,為什么這里只有我們的Area類?為什么?我們看看實體類

就是DataObject特性起的作用,應該說,所有加了該特性的類,都會被當作數據組件在ObjectDataSource配置里面出現。當然,不加DataObject特性也是可以的,但是在ObjectDataSource配置的時候,就不能勾選數據組件了,那樣會列出所有類(是的,所有類)。

選擇Area類,繼續

繼續猜測,這里能列出這些方法,應該也是有特性的,那就是DataObjectMethod特性啦。

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

當然啦,另外三個配置頁也是有的(這里以Update為例)

最后一步定義參數,在這里就不定義了

可以看到,左邊已經列出了前面選擇的Select方法的所有參數。

來看看一個神奇的地方

ObjectDataSource可以把查詢參數綁定到Cookie、控件、Request.Form、Request.QueryString、Session等。我們一般綁定到控件,做查詢的時候非常有用。每一個查詢項作為一個參數,然后在這里綁定到對應的控件;也經常綁定到QueryString,比如表單頁面編輯數據的時候,這里綁定主鍵,然后就能把相應的對象找出來。

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

然后編寫一個對應的查詢方法,當然要加上DataObjectMethod特性了,然后在ObjectDataSource配置的時候把參數和控件綁定起來

(關于這類高級查詢后面專門介紹,這里僅僅是為了說明綁定的神奇)

綁定的神奇就在于,界面控件問數據源控件(如ObjectDataSource)要數據的時候,數據源控件開始著手準備參數,反射讀取綁定控件的值作為參數,并轉為相應的類型,然后再反射調用實體類的查詢方法(如Search)。

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

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

這兩個方法,一個返回實體集合,一個返回總行數,而參數則是一摸一樣。這就是ObjectDataSource對分頁查詢的要求,如果沒有第二個,ObjectDataSource也能提供查詢數據功能,但是就沒辦法分頁了。

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

這兩個參數,第一個是從哪一行開始讀數據,第二個是返回的最大行數,其實就是每頁行數。這種分頁結構,跟別的絕大部分分頁控件什么的都不相同。所以,并不是XCode的分頁另類,而是別的分頁才是另類,XCode是正統(哈哈)。

除了分頁屬性,再看看一個排序屬性

正是查詢方法的倒數第三個參數。GridView在排序的時候,會給這個參數傳遞ID Asc或Name Desc等。而查詢方法內部,正是根據這個參數,以及兩個分頁參數,拼接SQL語句進行查詢的。

至此,ObjectDataSource配置完成。打開GridView的智能標記,選擇ObjectDataSource控件作為數據源,GridView即可自動生成列

當然,這個列并不是數據庫字段,而是實體類的屬性。

在智能標記面板上可以看到,啟用分頁和啟用排序可以勾選了,正是因為剛才在ObjectDataSource中配置好了。都勾上!

運行,看效果

界面很丑,不過那是美工的事情了。試試分頁(打開OrmDebug開關,查看SQL語句)

執行的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生成的分頁語句,因為現在測試環境是SQL2008,隨意生成了row_number的分頁,如果是別的數據庫,就會不同了。但那是XCode的事情,開發者不需要關心。

再試試在分頁的基礎上排序(點擊Name):

??? 執行的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

??? 排序已經改為Order By Name了,再點一次Name,執行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那里,其實還可以啟用編輯和刪除的,因為配置ObjectDataSource的時候,默認已經配置了編輯和刪除的方法。

?

??? 最后,目的已經達到,或許你還沒有發現,到這里我們還沒有手工編寫任何代碼呢!

?

??? XCode與ObjectDataSource共舞可以得到非常美的開發效果,但是,上面的模式,已經是三年前的做法了,我們現在有了更好的工業級的做法——批量生產

?

大石頭

新生命開發團隊

2010-08-24 13:25

轉載于:https://www.cnblogs.com/nnhy/archive/2010/09/13/1824669.html

總結

以上是生活随笔為你收集整理的与ObjectDataSource共舞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。