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共舞相关推荐

  1. 谷歌参展攻略!AI皮影戏、3D作画、与AI共舞...嗨翻魔都(附视频)

    来源:大数据文摘 作者:睡不着的Iris.魏子敏 本文约3200字,建议阅读8分钟. 本文介绍了谷歌在上海举办艺术展,带领大家看看如何将人工智能和绘画.音乐和皮影戏全面结合起来. 谷歌来上海啦! 虽然 ...

  2. “云计算”三部曲之二:与“云”共舞——再谈云计算

    引言:去年,我曾在一篇名为<未来计算在"云-端">的文章中指出,纯"云计算"并不是启动计算未来的"万能钥匙","云+端 ...

  3. mongodb与java结合_MongoDB初探系列之四:MongoDB与Java共舞

    MongoDB初探系列之四:MongoDB与Java共舞 来源:互联网 作者:佚名 时间:2015-08-05 08:20 对各位注意到这个帖子的朋友说一声对不起,我不是故意的测试服务器一直没关,一忙 ...

  4. 与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......

    全世界只有3.14 % 的人关注了 爆炸吧知识 从武汉新冠疫情爆发到如今,陈薇没有一天休息.短短半年间,54岁的她头发从黑到白,也哭了好几次. 刚去武汉-现在 陈薇的母亲也在电视上看到了女儿的变化:& ...

  5. 雨林木风与微软数年博弈:蚂蚁和大象共舞

    http://www.cnbeta.com/articles/105232.htm 虎年春节刚过,雨林木风公司位于松山湖的新大楼内,装修工人们又忙碌了起来. 雨林木风, 曾被业界称为"三大X ...

  6. 让R与Python共舞

    转载自:http://ices01.sinaapp.com/?p=129        R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现 工具.通俗点说,R是用来做统计和画图的.R拥有自己 ...

  7. 深度解密阿里达摩院:如何让科技与商业共舞

    恐怕再没有一个科研机构被赋予这么诗意的名字,达摩院. 它来源于武侠小说,作为武学最高研究机构,达摩院代表了修为的最高境界.同样,科研也需要精进.执着和专注的精神. 或许是源于对武学的痴迷,2017年1 ...

  8. markdown快速入门之有道云笔记七牛图床与极简图床共舞

    markdown快速入门之有道云笔记&七牛图床与极简图床共舞 为了方便编写博客,由于我对markdown的简约写法情有独钟,我一直相信磨刀不误砍柴工的道理,于是花了一个下午研究如何能在以后的编 ...

  9. 《与大象共舞》读书笔记

    <与大象共舞>读书笔记 这本书的副标题是<和IBM学转型>.但这本书的本质不是说转型的,而是说转型所必备的前提基础,没有这些基础是不可能转型成功的.不是你想转就能转的.但这本书 ...

最新文章

  1. 双水泵轮换工作原理图_「物业管理工作」水泵维护保养规程
  2. springboot调整请求头大小_【SpringBoot WebFlux 系列】 header 参数解析
  3. 免费学python的网站-学数据分析Python必备的8个免费学习网站
  4. 窗体DataGridView控件中按回车键时,单元格向下移动,如何能改成向右移动
  5. oracle19c 安装权限_oracle 19c 安装
  6. 【bzoj3280】小R的烦恼 费用流
  7. git提交项目到已存在的远程分支
  8. idea中自动deployment的步骤
  9. 三种方式使得iOS应用能够在后台进行数据更新和下载
  10. vue设置金额和时间格式(团购倒计时下次一定)
  11. Onvif协议学习:12、修改分辨率
  12. 【“免费”Windows优秀软件推荐】:Fences——自动整理桌面图标
  13. 点击开始十秒倒计时html,十秒倒计时案例.html
  14. PPT中放射发散型的文字效果设计技巧
  15. Win10怎么进Bios Win10系统进入BIOS界面的方法图文详解
  16. Android 音视频开发之基础篇 使用 imageview绘制一张图片
  17. 龙芯+复旦微FPGA全国产VPX高速数据采集卡解决方案
  18. 央视家庭厨房节目 <天天饮食> 43道家常菜
  19. 如何高效访问OneDrive个人存储空间?三种方法
  20. PLSQL中的存储过程

热门文章

  1. 使用myeclipse的第一步
  2. git shanchu stash_git stash用法
  3. 通过python利用哈希值实现比较两个文件的一致性
  4. 【J2SE】学习基础
  5. 【css】基础学习总结
  6. 关于pytorch--embedding的问题
  7. 程序员应该吃透的集合List
  8. LeetCode简单题之判断能否形成等差数列
  9. 三段式LLVM编译器
  10. Usb-type-C端口实现的挑战与设计方案