国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Asp.net2.0:如何使用ObjectDataSource(配合ORM)

2024-07-10 13:10:26
字體:
供稿:網(wǎng)友

asp.net2.0里面的objectdatasource可以使數(shù)據(jù)顯示控件gridview等進(jìn)行綁定顯示,編輯。還可以支持內(nèi)置的分頁,排序等。使用了orm之后,一樣可以使用objectdatasource。

這里的分頁不再是從數(shù)據(jù)庫取出所有,然后選擇性綁定,而是直接在數(shù)據(jù)庫取出第幾頁,然后綁定。這個差別還是十分巨大的,效率大大提高。
編輯,創(chuàng)建,排序也都是,直接由objectdatasource提供,不需要再gridview中寫什么代碼。
這樣,可以把object設(shè)計的包含有不少邏輯,至少是對數(shù)據(jù)庫操作的,而ui就顯得比較簡單,剝離的再開一點,對以后移植到win上,或者做成smartclient都比較有益。

這里有一片blog,講的比較好http://www.evosoftworks.com/articles/wormods.aspx。

我用的正好也是wilsonorm,所以照此也作了一個。

基本的結(jié)構(gòu)是這樣的:
ui(gridview等控件--objectdatasource控件)----〉objectdatasource類(object,寫crud分頁等邏輯)---〉(orm實現(xiàn)crud)---〉db

主要有幾步
1:給object增加屬性和方法,來完成crud,分頁等邏輯
2:配置gridview等ui控件連接到objectdatasource控件。


先看第一個
1:給object增加屬性和方法,來完成crud,分頁等邏輯。該object類由工具根據(jù)db結(jié)構(gòu)生成,同時生成的還有mapping文件。
      首先,給該object增加一個標(biāo)示屬性dataobject(),在system.componentmodel命名空間里面 [dataobject()]
public class productdescription
 {     第二,給這個object類增加crud的方法。
       先看一個insert方法
       [dataobjectmethod(dataobjectmethodtype.insert)]
        public static void insert(productdescription productdescription)
        {
            try
            {
                manager.datamanager.starttracking(productdescription, initialstate.inserted);
                manager.datamanager.persistchanges(productdescription);
            }
            catch (exception ex)
            {
                log.error(ex);
            }
        }       這個方法前面需要加一個[dataobjectmethod(dataobjectmethodtype.insert)]屬性,表示這是insert方法;
       這個方法是靜態(tài)公開的方法;
       參數(shù),就是這個object本身的一個實例。這樣比較好,因為在邏輯好很好理解,都是在對object進(jìn)行操作。
       剩下的,delete,update方法也是這樣寫。
       然后看看select方法,比較特殊。
  select方法
 1        [dataobjectmethod(dataobjectmethodtype.select)]
 2        public collection<productdescription> retrieve(string query, int maxrows, int startrowindex, string sortclause)
 3        {
 4            try
 5            {
 6                int numpages = 0;
 7                if (sortclause == null || sortclause == "")
 8                    sortclause = "modifieddate desc";
 9                collection<productdescription> cs;
10                cs = retrievepage(query, sortclause, maxrows, (int)math.ceiling((double)startrowindex / maxrows) + 1, out numpages);
11                _numrecs = ((iobjectpage)cs).totalcount;
12                return cs;
13            }
14            catch (exception ex)
15            {
16                log.error(ex);
17                return null;
18            }
19        }
20        [dataobjectmethod(dataobjectmethodtype.select)]
21        static public objectset retrieve(string key, string value)
22        {
23            if (value == null || value == "")
24                return null;
25            try
26            {
27                queryhelper helper = manager.datamanager.queryhelper;
28                key = helper.getfieldname(typeof(productdescription).tostring() + "." + key);
29                objectquery query = new objectquery(typeof(productdescription), string.format("{0}='{1}'", key, value), "");
30                objectset obj = manager.datamanager.getobjectset(query);
31                return obj;
32            }
33            catch (exception ex)
34            {
35                log.error(ex);
36                return null;
37            }
38        }
39
40        public int reccount(string query, int maxrows, int startrowindex, string sortclause)
41        {
42            return _numrecs;
43        }
44
45        public static collection<productdescription> retrievepage(string whereclause, string sortclause, int pagesize, int pageindex, out int pagecount)
46        {
47            objectquery<productdescription> query = new objectquery<productdescription>(whereclause, sortclause, pagesize, pageindex);
48            objectset<productdescription> pageset = manager.datamanager.getobjectset<productdescription>(query);
49            pagecount = pageset.pagecount;
50            return pageset;
51        }           第一個方法public collection<productdescription> retrieve(string query, int maxrows, int startrowindex, string sortclause),這是可以實現(xiàn)內(nèi)置分頁,和排序的方法。需要注意的是這句代碼_numrecs = ((iobjectpage)cs).totalcount; 在這里,分頁之后,立即取出總頁數(shù),這個是用來供顯示頁號的;于此對應(yīng),方法 public int reccount(string query, int maxrows, int startrowindex, string sortclause)就是用來取出記錄條數(shù)的;注意,這兩個方法一定要對應(yīng),參數(shù)也一樣。
          第二個方法 static public objectset retrieve(string key, string value)只是普通的取出一條紀(jì)錄。可以用在detailview/formview的顯示。
           代碼看上去雖然很多,但是其實很模式化,所以可以使用codesmith或者直接修改一下ormhelper工具來動態(tài)生成,不需要手工寫代碼。
           有了這四個方法,crud,分頁,排序就已經(jīng)完成了。這樣的object,和ui無關(guān),只是數(shù)據(jù)邏輯。

2:ui的配置。ui配置也分兩層:gridview等顯示控件;objectdatasource控件
       現(xiàn)在給gridview等控件配置object數(shù)據(jù)源,直接連接到object上,實現(xiàn)顯示編輯等功能。其實就是設(shè)置一個連接到objectdatasource的屬性。
        <asp:gridview id="gv_data" runat="server" allowpaging="true" allowsorting="true" datasourceid="ods_list"
       
        這是objectdatasource控件的配置
objectdatasource
 1<asp:objectdatasource id="ods_list" runat="server" dataobjecttypename="businessmodel.productdescription"
 2    deletemethod="delete" oldvaluesparameterformatstring="original_{0}" selectmethod="retrieve"
 3    typename="businessmodel.productdescription" updatemethod="update" sortparametername="sortclause"
 4    maximumrowsparametername="maxrows" selectcountmethod="reccount" enablepaging="true"
 5    conflictdetection="overwritechanges" convertnulltodbnull="false">
 6    <selectparameters>
 7        <asp:parameter name="query" type="string" />
 8        <asp:parameter name="maxrows" type="int32" />
 9        <asp:parameter name="startrowindex" type="int32" />
10        <asp:parameter name="sortclause" type="string" />
11    </selectparameters>
12</asp:objectdatasource>
          看看里面的屬性,就是配置crud方法的參數(shù),和對應(yīng)的方法名。這些正是我們在類中實現(xiàn)的。比方說這里配置delete方法:deletemethod="delete";而這里就是剛才說的記錄個數(shù)的屬性:selectcountmethod="reccount";還有排序等等。
         這里的參數(shù)怎么傳遞?系統(tǒng)相關(guān)的屬性由系統(tǒng)傳遞,比方說,maxrows,startrowindex什么的;也可以用代碼來傳遞:  this.ods_list.selectparameters["query"].defaultvalue = query;

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗江县| 西乌| 育儿| 瓮安县| 宝丰县| 涪陵区| 土默特右旗| 宣武区| 固镇县| 阳西县| 龙口市| 三河市| 黄陵县| 宁德市| 馆陶县| 孝感市| 南涧| 临江市| 延川县| 玉树县| 突泉县| 西平县| 梁平县| 高台县| 岫岩| 长宁区| 肥东县| 南汇区| 定兴县| 巢湖市| 四平市| 礼泉县| 福鼎市| 都江堰市| 陆良县| 依安县| 上林县| 永寿县| 梅州市| 许昌市| 天全县|