与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

wps_clip_image-15245

选中ObjectDataSource,注意右上角的智能标记

wps_clip_image-23943

配置数据源

wps_clip_image-16852

这里只列出数据组件,为什么这里只有我们的Area类?为什么?我们看看实体类

wps_clip_image-12458

就是DataObject特性起的作用,应该说,所有加了该特性的类,都会被当作数据组件在ObjectDataSource配置里面出现。当然,不加DataObject特性也是可以的,但是在ObjectDataSource配置的时候,就不能勾选数据组件了,那样会列出所有类(是的,所有类)。

选择Area类,继续

wps_clip_image-24997

继续猜测,这里能列出这些方法,应该也是有特性的,那就是DataObjectMethod特性啦。

wps_clip_image-9268

第一个参数代表方法类型(查询、插入、更新、删除),第二个参数表示是否默认方法,默认方法会在配置ObjectDataSource时被默认选中。

当然啦,另外三个配置页也是有的(这里以Update为例)

wps_clip_image-12855

wps_clip_image-24612

最后一步定义参数,在这里就不定义了

wps_clip_image-16010

可以看到,左边已经列出了前面选择的Select方法的所有参数。

来看看一个神奇的地方

wps_clip_image-21754wps_clip_image-27958

ObjectDataSource可以把查询参数绑定到Cookie、控件、Request.Form、Request.QueryString、Session等。我们一般绑定到控件,做查询的时候非常有用。每一个查询项作为一个参数,然后在这里绑定到对应的控件;也经常绑定到QueryString,比如表单页面编辑数据的时候,这里绑定主键,然后就能把相应的对象找出来。

这里神奇的地方就在于绑定。需要做复杂查询的时候,可以在界面上放置查询控件

wps_clip_image-140

然后编写一个对应的查询方法,当然要加上DataObjectMethod特性了,然后在ObjectDataSource配置的时候把参数和控件绑定起来

wps_clip_image-9814

(关于这类高级查询后面专门介绍,这里仅仅是为了说明绑定的神奇)

绑定的神奇就在于,界面控件问数据源控件(如ObjectDataSource)要数据的时候,数据源控件开始着手准备参数,反射读取绑定控件的值作为参数,并转为相应的类型,然后再反射调用实体类的查询方法(如Search)。

到这里,ObjectDataSource的基本配置已经完成,绝大多数ORM框架对ObjectDataSource的支持,也仅仅是到这里而已。而XCode的模型,是完全满足ObjectDataSource要求的,下面继续高级功能

wps_clip_image-31176

这是ObjectDataSource控件属性中的分页类属性,第一项启用分页,第三项指定用于查询所有记录数的方法(前面提到过查询方法是成对出现的,这里的FindAllByName和FindCountByName就是一对),至于第二项和第四项,是不是很熟悉?

wps_clip_image-17527

wps_clip_image-6921

这两个方法,一个返回实体集合,一个返回总行数,而参数则是一摸一样。这就是ObjectDataSource对分页查询的要求,如果没有第二个,ObjectDataSource也能提供查询数据功能,但是就没办法分页了。

回过头了,仔细看看最后两个参数的名称,是不是跟ObjectDataSource属性中的那两个一摸一样?所以,XCode使用这两个名字作为参数名,正是这个原因。如果查询方法使用的不是这两个参数,那么在配置ObjectDataSource的时候自己跟着改就是了。

这两个参数,第一个是从哪一行开始读数据,第二个是返回的最大行数,其实就是每页行数。这种分页结构,跟别的绝大部分分页控件什么的都不相同。所以,并不是XCode的分页另类,而是别的分页才是另类,XCode是正统(哈哈)。

除了分页属性,再看看一个排序属性

wps_clip_image-8804

正是查询方法的倒数第三个参数。GridView在排序的时候,会给这个参数传递ID Asc或Name Desc等。而查询方法内部,正是根据这个参数,以及两个分页参数,拼接SQL语句进行查询的。

至此,ObjectDataSource配置完成。打开GridView的智能标记,选择ObjectDataSource控件作为数据源,GridView即可自动生成列

wps_clip_image-7754

当然,这个列并不是数据库字段,而是实体类的属性。

在智能标记面板上可以看到,启用分页和启用排序可以勾选了,正是因为刚才在ObjectDataSource中配置好了。都勾上!

运行,看效果

wps_clip_image-6948

界面很丑,不过那是美工的事情了。试试分页(打开OrmDebug开关,查看SQL语句)

wps_clip_image-8101

执行的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):

wps_clip_image-31464

    执行的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

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分类: X组件

本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/archive/2010/09/13/1824669.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 3.1中使用JWT身份认证

文章目录 0、引言1、关于Authentication与Authorization2、整个认证流程是怎样的&#xff1f;3、开始JWT身份认证 3.1 安装JwtBearer包3.2 安装Swashbuckle.AspNetCore包3.3 添加身份认证相关服务到容器中3.4 添加Swagger服务到容器中3.5 将身份认证加入到管道中3.6 将swagger加…

《ASP.NET Core 6框架揭秘》实例演示[10]:Options基本编程模式

依赖注入使我们可以将依赖的功能定义成服务&#xff0c;最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了可以采用依赖注入的形式消费承载某种功能的服务&#xff0c;还可以采用相同的方式消费承载配置数据的Options对象&#xff0c;这篇文章演示几种典型的编程模式…

实现仿简书选取内容生成分享图片效果

前几天脑子里忽然闪过简书的图片分享效果&#xff0c;感觉很简洁也很漂亮&#xff0c;想着能不能用自己方式实现一下呢&#xff0c;于是今天就有了这篇文章。好了&#xff0c;先看下效果图吧&#xff1a; 项目地址: https://github.com/zhangke301... 欢迎star、issues~ 实现这…

千万级可观测数据采集器--iLogtail代码完整开源

2022年6月29日&#xff0c;阿里云iLogtail开源后迎来首次重大更新&#xff0c;正式发布完整功能的iLogtail社区版。本次更新开源全部C核心代码&#xff0c;该版本在内核能力上首次对齐企业版&#xff0c;开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。…

Java8新特性--CompletableFuture

并发与并行 Java 5并发库主要关注于异步任务的处理&#xff0c;它采用了这样一种模式&#xff0c;producer线程创建任务并且利用阻塞队列将其传递给任务的consumer。这种模型在Java 7和8中进一步发展&#xff0c;并且开始支持另外一种风格的任务执行&#xff0c;那就是将任务的…

用 MAUI 在Windows 和 Linux 绘制 PPT 图表

我在做一个图表工具软件&#xff0c;这个软件使用 MAUI 开发。我的需求是图表的内容需要和 PPT 的图表对接&#xff0c;需要用到 OpenXML 解析 PPT 内容&#xff0c;读取到 PPT 图表元素的内容&#xff0c;接着使用 MAUI 渲染层绘制图表元素。图表工具软件需要在 Windows 平台和…

聊聊接口性能优化的11个小技巧

前言 接口性能优化对于从事后端开发的同学来说&#xff0c;肯定再熟悉不过了&#xff0c;因为它是一个跟开发语言无关的公共问题。 该问题说简单也简单&#xff0c;说复杂也复杂。 有时候&#xff0c;只需加个索引就能解决问题。 有时候&#xff0c;需要做代码重构。 有时…

Java中ArrayList,LinkedList,Vector三者的异同点及其使用场景和ArrayList的一些常用方法

相同点&#xff1a;三者存储的都是有序&#xff0c;可重复的数据。 异&#xff1a; ①&#xff1a;ArrayList底层存储类型是Object数组&#xff0c;而LinkedList底层是双向链表 ②&#xff1a;ArrayList和Vector调用创建空参构造器创建对象时&#xff0c;默认的size是10&…

第二百四十六节,Bootstrap弹出框和警告框插件

Bootstrap弹出框和警告框插件 学习要点&#xff1a; 1.弹出框 2.警告框 本节课我们主要学习一下 Bootstrap 中的弹出框和警告框插件。 一&#xff0e;弹出框 弹出框即点击一个元素弹出一个包含标题和内容的容器。 基本用法 注意&#xff1a;必须在js结合popover()方法使用 da…

Intellij IDEA2017 的控制台里不识别maven命令问题处理

2019独角兽企业重金招聘Python工程师标准>>> cmd里运行 mvn -v可以显示出maven的版本信息&#xff0c;可是在IDEA的控制台里却提示不识别maven命令&#xff0c;此情况以管理员的身份运行IDEA即可。 转载于:https://my.oschina.net/u/2364025/blog/1788797

使用IDEA 提交代码到svn

2019独角兽企业重金招聘Python工程师标准>>> 新手第一次使用教程&#xff1a; 一、安装svn TortoiseSVN是个客户端&#xff0c;需要安装VisualSVN服务端。 二、IDEA配置&#xff08;Ctrl alt S&#xff09; 需要配置服务端svn.exe文件。 三、上传代码 svn路径&…

如何在 BackgroundService 获取 ASP.NET Core 启动地址

前言上次&#xff0c;我们介绍了《如何获取 ASP.NET Core 启动地址》。但是&#xff0c;如果要在 BackgroundService 中获取启动地址可不那么容易&#xff0c;因为 BackgroundService 在 app 启动前就开始执行了:var builder WebApplication.CreateBuilder(args); builder.Ser…

016-Spring Boot JDBC

一、数据源装配 通过查看代码可知&#xff0c;默认已装配了数据源和JdbcTemplate System.out.println(context.getBean(DataSource.class)); System.out.println(context.getBean(JdbcTemplate.class)); 1.1、环境搭建 主要是pom引用&#xff1a;spring-boot-starter-jdbc、增加…

分库分表和 NewSQL 到底怎么选?

文章来源&#xff1a;【公众号&#xff1a;CoderW】 目录 背景 分表 分库 分库分表的成本 NewSQL NewSQL 平滑接入方案 NewSQL 真的有那么好吗&#xff1f; NewSQL 的应用 分库分表和 NewSQL 到底怎么选&#xff1f; 背景 曾几何时&#xff0c;“并发高就分库&#xff…

jQuery/javascript实现简单网页计算器

1 <html>2 <head>3 <meta charset"utf-8">4 <title>jQuery实现</title>5 <script src"jquery.js"></script>6 7 <style type"text/css">8 table{background-color:pink;width:300px;height…

雷军招人反被3句话问懵:当我在面试牛人的时候,牛人也在面试我

来 源&#xff5c;环球人力资源智库&#xff08;GHRlib&#xff09; 作 者&#xff5c;Black “你做过手机吗&#xff1f;” “没做过。” “你认识中移动老总王建宙吗&#xff1f;” “不认识。” “你认识富士康老板郭台铭吗&#xff1f;” “我认识他&#xff0c;他不认识我…

C# 11 中的 required members

C# 11 中的 required membersIntro在 C# 11 中引入了一个新的特性 —— Required Members&#xff0c;引入了一个新的 required 关键词&#xff0c;可以用来表示字段或者属性在类型初始化的时候必须要进行初始化&#xff0c;这一特性也进一步的改进了可空引用类型的用法。Sampl…

互联网大佬简史:马云/雷军/罗永浩/刘强东...

燃财经&#xff08;ID:rancaijing&#xff09;原创 作者 | 杜枫 编辑 | 魏佳中国互联网的发展&#xff0c;是一部由大佬撑起的奋斗史&#xff0c;也是一部由大佬主演的打脸史。和传统行业不同&#xff0c;互联网行业日新月异&#xff0c;从业者趋于年轻。马云唱起了摇滚&#x…

Windows 11 新版 22621.575 和 22622.575 推送:照片、URL、文件资源管理器

面向 Beta 频道的 Windows 预览体验成员&#xff0c;微软推送了 Windows 11 预览版 Build 22621.575 和 22622.575。 目前 Beta 频道 Windows 11 预览版分为两组进行测试&#xff0c;通过两组 Windows 预览体验成员的使用数据和反馈&#xff0c;以更好的测试新功能的可靠性。Wi…

linux mysql5.6 安装

2019独角兽企业重金招聘Python工程师标准>>> 1、gcc yum install gcc gcc-c ncurses-devel perl 2、cmake安装 wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz tar -xzvf cmake-2.8.10.2.tar.gz cd cmake-2.8.10.2 ./bootstrap ; make ; make insta…