Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?

分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?

作者头像
用户1174620
发布于 2018-02-08 08:12:49
发布于 2018-02-08 08:12:49
1.3K0
举报

目的:

1、一个页面(DataList.aspx)可以显示多个模块的列表功能。      一般是有一个列表需求就需要一个aspx文件,如果有100个列表,那么就会有100个aspx文件,这么多的文件(包括.aspx.cs文件)里面的内容基本是一样的,这样写起来麻烦,管理起来也不容易,命名就是一个比较头痛的问题。文件多了。打开IDE、备份程序文件、编译所需要的时间都会增长。这些都是很郁闷的事情。那么我们能不能“合并”一下呢?所有(或者大部分没有特殊情况的)列表都是用同一个aspx文件呢。

     比如我们要做一个新闻维护,那么用DataList.aspx;要做一个产品管理,也用DataList.aspx;做一个员工管理,还是使用DataList.aspx。这三个是完全一样的文件。

2、数据库变了,我们只改一处。

     当数据库有变化的时候(比如添加了一个字段、删除字段、修改了字段的名字),在程序方面只需要修改一个地方就可以应对,不需要改多的地方,更不用到处去找应该修改哪里。

实现:

第一步:一个页面

QuickPager分页控件的使用已经比较简单,设置几个属性就可以了,但是这只是一个列表页面的时候,如果我们要多个列表,那么就需要重复的写给属性赋值的语句。比如做一个新闻管理,我们要给分页控件设置属性;我们要做一个产品管理的时候还要再次给分页控件设置属性,一样的代码还要在写一遍。当然给属性赋值的内容是不一样的。其实也就是表名、字段名变了一下(一个是新闻表的,一个是产品表的),代码基本上没变。

     试想我们的项目里不会只有这两个列表页面吧,少则十几个,多则上百个,每个列表页面都要写一遍给分页控件设置属性的代码,岂不是很烦。在我看来这也是一种冗余代码。是要去掉滴,或者要抽象出来。就是说,给分页控件设置属性的带码,只写一遍就可以了,不用增加一个列表就重新写一遍。

     当然可以使用代码生成器来完成,但这是治标不治本,没有解决根本性问题,带码还是那么多,只不过不用手动敲出来罢了。那么怎么办呢?既然属性名称、个数是固定的,只是值不一样,那么我们是不是可以把属性值放在XML文件里面呢?用的时候读取出来给分页控件的属性赋值就ok了,这样赋值的代码写一遍就可以了。

     好了,我们的目标已经完成了三分之一,下面是显示数据的问题。(分页控件负责提取数据,不负责如何显示)

第二步:显示数据

     一般我们会使用GridView这一类的控件来显示数据,确实是很方便很强大,这个我确实是佩服。GridView可以和ObjectDataSource来配合使用,这样可以根据数据源的情况自动添加Columns。但是目前分页控件还没有这个功能。

怎么办呢?自己写一个专门用来显示数据的控件吧,就叫做myGrid。一定有人说我又在重复制造轮子了,这个嘛,这回做一个简单的就可以了,根据配置信息来显示需要显示的字段就可以了。

     他的特点就是可以根据配置信息自动绘制Table,这个功能GridView已经有了呀,为什么还要自己做呢?

myGrid要做到的事情:

0、显示数据(废话),显示DataTable 里面的数据。 1、行交替颜色(可以多种颜色循环) 2、列交替颜色(可以多种颜色循环) 3、鼠标经过改变颜色,单击选中并改变颜色。 4、可以锁定行列。 5、可以多表头。 6、可以多列显示,就是多条记录可以在一行显示,而且一条记录在多个td里面。 7、可以行列转换。 8、个性化设置,使用人员可以依据自己的口味增加减少显示的字段,可以修改字段显示的前后顺序,当然是在权限范围内。

     对于第七点还要再多说一点,DataList可以多行多列的显示数据,但是一条记录只能放在一个item里面也就是一个TD,GridView可以多个TD的形式显示数据,但是同一行里只能有一条记录。

而我要做的是,一条记录要显示三个字段,每两条记录放在一行,就是说一个TR有六个TD,前三个TD是一条记录,后三个TD是下一条记录的。不知道大家时候有过这种需求,反正我是想实现这种功能。

     这个是显示数据的控件想要达到的效果,不过这回先实现基本的功能,最简单的把数据显示出来,其他的以后扩充。

     这个其实很好办,获得一个DataTable作为数据源,然后用循环的方式输出Table形式的html代码就OK了。

这样我们就可以把分页控件提供的数据源给显示出来了。现在我们距离目标剩下三分之一了。

第三步:自动适应数据库的变化

     不过等等,页眉里显示什么名字呢?就是每一列都叫做什么?总不能直接把字段名放上去吧,另外TD还需要一些修饰,比如居左、居右、还是居中?TD的宽度设置成多少?数据是不是还要格式化一下呢?否则的话会很难看的。

还有就是数据库里的字段名称变化的话,myGrid是不是不用修改就可以自动适应呢?

     好了这个就是最后一个问题了,胜利在望,坚持就是胜利。这个问题再加上前面的分页控件的属性的问题,我们可以合在一起考虑。我的思考结果是设置几个表来存放这些信息。

如下图:

     假设我们要实现一个新闻管理的功能,上图得出来的数据表示:我们有一个“新闻管理”的节点(功能模块),新闻管理的列表需要显示四个字段:Title、Content、AddedDate、hits,对应的名称是:新闻标题、内容、添加时间、人气,不限定td的宽度,左对齐。添加时间要格式成 08-07-26 的形式。

     等等,新闻列表里面怎么能有新闻内容呢?这个文字也太多了呀,显示不下吧,应该去掉,那么怎么办呢?删除一条记录就可以了,Manage_FunListCol 里面删除一条ColumID为100100300并且FunctionID为21的记录就可以了。

     什么?您说还要手动到数据库里面删除记录,还得找ID,这也太麻烦了,还不如直接写代码方便呢!是呀,确实挺麻烦。不过我只说把信息放在了数据库里面,并没有说我们要手动去修改数据库的记录呀。我们可以给自己写一个管理程序,通过这个程序来管理这些信息。“我写项目的步骤” 这里说的工具就是维护这些信息的。

     我们建立几个表来存放需要的信息,然后在myGird里面读取出来绘制<Table>,最后在接收QuickPager传递过来的DataTable显示数据。

Manage_Function            模块表 :记录项目里的模块信息。 Manage_Function_Info     分页、表单信息表(1:1): 记录模块的列表和表单需要的信息。 Manage_Table                “表”的扩展信息:记录数据库里的表、视图、存储过程等的信息。 Manage_Columns           “字段”的扩展信息:记录数据库里的字段的扩展信息。 Manage_FunListCol          列表需要的字段 1:n 记录列表页面需要的字段,和TD的描述信息。

以上几个表的设计文档:http://files.cnblogs.com/jyk/configgrid.rar Excel格式,里面有详细的说明。

通用权限的思路。带有数据库关系图 还记得这一篇吗?这里的 Manage_Function表就是权限管理里面的[项目—功能结点] 表。

     先写一下思路,一会把myGrid的代码写出来,预计明天发出来。

     ORM。如果说ORM是实体类和数据库的一种对应的话,那么这些表记录的信息,就是数据库里的字段UI控件的对应关系,以及控件的描述。我的思路就是通过自定控件(myGrid、表单控件、查询控件)直接把字段和UI联系起来,达到简化操作的目的,还有就是当增加(修改)了一个字段的时候,点几下鼠标就可以搞定!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一个页面搞定几乎所有的列表需求的实现思路和一点代码。
     其实如果要单独实现一个能够显示数据的表格,那么是很简单的,写一个for循环,把DataTable里面数据循环出来就OK了。相信大家都会做吧,如果是从asp走过来的应该更不陌生吧。      上一篇说了,我们要根据表里面的记录来确定显示哪些列,哪一列在前,哪一列在后。那么怎么做呢?我们先定义一个类来存放这些信息。  public class GridColumnsInfo     {         public int ColumnID = 0;       public string Co
用户1174620
2018/02/26
1.3K0
【自然框架】QuickPager分页控件的总体介绍和在线演示
QuickPager分页控件的特点  两种运行方式:自动运行、手动运行。前者便捷,后者灵活。  多种分页方式:Postback、Postback伪URL、URL、URL重写、Ajax For服务器控件伪URL。  多种分页算法:Max、颠倒Top(优化版)、Row_Number、自动适应等。可以应对多种数据库和各种需求。  支持多种数据显示控件:GridView、DataList、Repeater等控件。有DataSource和DataBind()的控件都支持。  不需要存储过程,但是仍然可以保证高效率!
用户1174620
2018/02/26
1.2K0
【自然框架】 页面里的父类—— 改进和想法、解释
1、 从Control到GridView继承了多少层? (这个图可不是现做的,这是以前为了写QuickPager分页控件而弄的。http://www.cnblogs.com/jyk/archive/
用户1174620
2018/02/26
1.3K0
【自然框架】 页面里的父类—— 改进和想法、解释
【小试身手】几个自定义控件的组合应用,实现简单的“增删改查”功能(有源码)
     分页控件、查询控件、显示数据的控件和表单控件,终于把这几个控件结合在一起了,和在一起之后就可以让“增删改查”变的非常的简单和容易了,当然还需要数据访问函数库的支持。      综合演示的IDE是 vs2008,.net Framework2.0,C#, B/S 。目标(适用范围)是网站的后台管理、OA、CRM、CMS等信息管理方面的项目。      演示网址:http://jyk.mainsdn.com/ 感谢 CleverKing (www.mainsdn.com)提供空间和域名。      自
用户1174620
2018/02/26
8130
【小试身手】几个自定义控件的组合应用,实现简单的“增删改查”功能(有源码)
100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
  上周看到了两篇关于DataReader分页的帖子,帖子的观点都是可以是用DataReader来分页,而且效率还不错。   根据我的分页经历来看,很难理解DataReader分页怎么就快了呢?理论上就不说了,直接用测试说话。   1、100w条记录,使用SQL语句(max方法)分页,PostBack方式,GridView显示数据。(第一页需要统计总记录数,所以会有点慢)http://demo.naturefw.com/Nonline/QuickPager/200w/GridView.aspx   2、10
用户1174620
2018/02/08
1.6K0
分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
    这里要说的不仅仅是一个分页控件,而是一套解决方案,包括如何显示数据、显示分页导航,如何得到分页用的sql语句(等效于存储过程),如何提取数据,如何绑定控件,如何响应事件,添加、修改、删除数据后如何更新,如何查询数据等等。一整套完整的解决方案。 这个方案要有几个特点:       1、支持多种数据库,可以提供多个分页算法以便于支持多种数据库。       2、可以在不同的要求下选用最优的分页算法。比如如果只需要按照主键排序,那么选择Max分页算法无疑是最快的一种分页算法。       3、按需所取。
用户1174620
2018/02/08
1K0
分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
分页控件正式命名为 QuickPager ASP.NET2.0分页控件 。 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack 、URL (暂时没有实现URL的分页方式) webform  (b/s) 支持多种数据库,分页算法,提取数据的方式都可以替换。     分页,自从做b/s的项目起,就和分页打起了交到,一开始使用UserControl来做,很粗糙,也没有什么性能可言。但是分页又是不可避免的,一次提取全部的数据,咱用的资源太多,吃不消。于是乎就在不断的
用户1174620
2018/02/26
1.2K0
【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
我的分页控件(未完,待续)——控件件介绍及思路
分页控件新版本,基于.net2.0。 http://www.cnblogs.com/jyk/archive/2008/07/05/1236692.html 一、 工作的层次 UI层和逻辑层。 UI层:显示首页、末页、上一页、下一页、页号导航、文本框输入页号;共计多少条记录、多少页、当前页号等信息。 逻辑层:提供分页算法(SQL语句),根据分页控件的属性,在运行的时候生成分页用的SQL语句。 二、 流程 l 设置分页控件的属性 l 根据算法和属性生成SQL语句,通过“我的数据访问层”访问数据库 l 得到
用户1174620
2018/02/07
1.2K0
【自然框架】稳定版beta1——源码下载,Demo说明
在线演示:http://demo.naturefw.com/ 开源协议   一直想说来着,可是总忘。开源协议采用 BSD开源协议。   一直在说开源,但只是把源码放出来了,连个开源协议都没说,虽然说了也基本等于没说。但是还是要说一下的。   再有就是会陆续把文档完善出来。 版本说明 稳定版的含义,指的是元数据的结构、对外接口(类名、函数名、参数等)稳定下来,以后的版本都会以这个版本为准,兼容这个版本的格式。   那怎么又出来了beta1呢,那是因为虽然现在大部分都稳定了,但是还是有一些小地方没有最后确定,
用户1174620
2018/02/26
1.3K0
【自然框架】稳定版beta1——源码下载,Demo说明
【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。
【类图】 【命名空间】——————————————————【文件截图】 可能您会问,不就是弄个父类吗,怎么又是这么复杂呢?这个嘛,听我慢慢道来。 (类图里面Tree、Main1、Dat
用户1174620
2018/02/26
9350
【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。
【自然框架】之通用权限(六):权限到节点
      “直率没有错,但是也要考虑对方的承受能力呀!对方都承受不了了,你还直率,那就是你的错了!”  ——我的名言,呵呵。     ====================我就是传说中的,可爱的、无奈的、笑笑而过的分割线====================       继续,这是第六章了。我发现,越来越难了。终于把表结构都介绍完了,来到了如何应用的阶段了。有回复说我是跳过了设计阶段,恩,设计阶段基本上是在我的脑子里。当然这是一个不好的习惯。不弄出来个UML、ER这样的东东,别人怎么理解呢?又怎么能
用户1174620
2018/02/08
9540
【自然框架】之通用权限(六):权限到节点
【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式
关键字:提出需求、需求分析、原则、设计模式、索引      先说一下讨论的范围:使用数据库保存信息的项目,b/s结构,asp.net编写。请不要讨论这个范围之外的事情哦,谢谢!      这里想说的并不仅限于一个控件,而是一个关于分页的解决方案。信息都是放在数据库里的,在b/s结构里面一次提取所有的数据显示并不是一个好的方法,所以就需要一个把数据分成多个页的形式来显示。关于分页的解决方案有多种,一种实现方式可以用一个“分页控件”(我的解决方案),也可以用其他的方式来体现(比如LinQ、ORM等)。这里想说的
用户1174620
2018/02/26
8330
【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式
很简单的企业管理器---我写程序的方式,几个自定义控件。
这里呢我利用我常用的东东写个实例,抛砖引玉,大家也都来批批,帮助我提高嘛。 我常用的呢是 数据访问层(简单理解是SQLHelp,但是绝不等于)、分页控件等自定义控件、UserControl等。 实例呢就是做一个很简单的“企业管理器”,等等,不要想的太远,我没想做那么大,我只想达到如下几个功能即可。 1、显示SQL里面的数据库名。 2、根据选择的数据库名显示数据库里的表名。 3、选择一个表然后以分页的方式显示数据。 4、对数据可以进行查询。(不好意思,还没完成) 5、对选择的数据可以编辑,可以添加、删除
用户1174620
2018/02/07
7500
很简单的企业管理器---我写程序的方式,几个自定义控件。
我自己写的一个分页控件(源码和演示代码)PostBack分页版 for vs2003、SQL Server
温馨提示: asp.net分页控件已经升级了,基于.net2.0 ,支持多种数据库。 正式命名为:QuickPager Asp.net 2.0 分页控件。 网站:www.natureFW.com 下载:http://www.naturefw.com/down/List1.aspx 在线演示:http://demo.naturefw.com 上一篇随笔: 我的分页控件(未完,待续)——控件件介绍及思路 一、分页控件的工作层次     如果按照三层的划分方式来说,应该算作工作在 UI层 和 逻辑层
用户1174620
2018/02/08
1.2K0
【开源】QuickPager ASP.NET2.0分页控件——使用示例、基本应用和查询功能
    myPage分页控件发出来之后,虽然开源了,但是没有给一个简单一点的 demo,真是漏掉了一个很重要的部分。     先说明一下使用myPage分页控件需要的文件。 Controls.dll :这个是分页控件的dll文件,您可能要问,为什么不叫 myPage.dll呢?因为里面不仅有分页控件,还包含其他的控件,比如扩展功能的TextBox等控件,这是多个控件的集合,所以就叫做 Controls.dll 了。对应的有一个Controls.XML文件,里面放的是控件里的属性、函数、事件的提示说明。这
用户1174620
2018/02/26
1.2K0
【开源】QuickPager ASP.NET2.0分页控件——使用示例、基本应用和查询功能
【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库
   分享一个生成分页用SQL的函数库   一般一提到分页,大家就会想到存储过程,而大多数情况都是在存储过程里面拼接SQL,我觉得与其在存储过程里面拼接,还不如写个程序来拼接。这样更便于维护,而且效率也不差多少。   所以我就写了这个类库—— QuickPagerSQL。   一开始这个功能是在QuickPager分页控件内部的,但是放在一起的话,违反了单一职责。所以把它独立了出来。现在QuickPagerSQL是一个独立的类库,可以单独调用。   他的目的很明确,就是根据已知条件,依据分页算法,来拼接需
用户1174620
2018/02/26
7810
【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库
分页控件之分页算法 —— for SQL Server 版。
上两篇随笔: 我的分页控件(未完,待续)——控件件介绍及思路 我自己写的一个分页控件(源码和演示代码)PostBack分页版 for vs2003、SQL Server 关于分页的误区     误区1:分页的时候,只有使用存储过程,效率才高。     误区2:忽略了索引的作用。 上两篇好像介绍的不太详细,这里详细说明一下分页控件里使用的分页算法,也就是SQL语句。 分页一般分为四种情况 1、单字段排序,排序字段没有重复值。 2、单字段排序,排序字段有重复值。 3、多字段排序,最后一个排序字
用户1174620
2018/02/08
1.7K0
【自然框架】 之 资源角色——列表过滤方案(思路篇)
名词解释 1、资源角色,我的理解就是资源过滤方案 + 角色。就是把资源过滤方案和角色结合在一起的东东。 2、资源:这里的资源指的是关系数据库里的记录。 3、资源过滤:就是按照一定的条件提取数据库里的记录。比如只提取自己添加的记录,只提取Kind=2的记录。 4、资源过滤方案:就是把这种查询条件以“方案”的形式保存起来,以便于和角色结合。 数据列表的过滤方案         资源过滤又分为两种:数据列表的过滤和绑定控件(比如下拉列表框等)的过滤。       其实不管哪一种,保存的都是查询条件,我把它
用户1174620
2018/02/26
1K0
【自然框架】 之 资源角色——列表过滤方案(思路篇)
【8】数据浏览表格的快速输出
阅读目录 用什么来展示数据列表? 表格还是列表? 表头 对表格输出的封装 生成表格的实例 功能的扩展 在页面数据和控件的自动交换机制中,我们通过PageX实现了一种快速的控件和数据交换机制,能够方便快捷地完成数据库中的数据记录的管理。一般情况下,在进入这个编辑页面之前,还应该有另外一个页面,可以一次展示多条数据记录的信息。在这个数据的列表界面中,可以进行各种操作,如删除、跳转、编辑等。这个数据列表页面不仅可以按照数据库的分类展示数据,也可以根据需要进行展示,如按指定字段排序、根据查询结果展示、分
用户1075292
2018/01/23
3.1K0
【8】数据浏览表格的快速输出
【自然框架】之通用权限(八):权限到字段(列表、表单、查询)
 通用权限想要写的文章目录:(这是第八章) 1、 简介、数据库的总体结构 2、 介绍人员表组 3、 介绍组织结构表组 4、 介绍角色表组 5、 介绍“项目自我描述表组” 6、 权限到节点 7、 权限到按钮 8、 权限到列表(表单、查询) 9、 权限的验证 10、 资源方面的权限 11、 角色管理的程序(给客户用的) 12、 权限下放 13、 个性化设置 A、 【自然框架】之通用权限(外传):杂谈 列表 myGrid 先说一下myGrid,我会根据Manage_FunListCol表和Manage_Colum
用户1174620
2018/02/26
1.1K0
推荐阅读
一个页面搞定几乎所有的列表需求的实现思路和一点代码。
1.3K0
【自然框架】QuickPager分页控件的总体介绍和在线演示
1.2K0
【自然框架】 页面里的父类—— 改进和想法、解释
1.3K0
【小试身手】几个自定义控件的组合应用,实现简单的“增删改查”功能(有源码)
8130
100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
1.6K0
分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
1K0
【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
1.2K0
我的分页控件(未完,待续)——控件件介绍及思路
1.2K0
【自然框架】稳定版beta1——源码下载,Demo说明
1.3K0
【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。
9350
【自然框架】之通用权限(六):权限到节点
9540
【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式
8330
很简单的企业管理器---我写程序的方式,几个自定义控件。
7500
我自己写的一个分页控件(源码和演示代码)PostBack分页版 for vs2003、SQL Server
1.2K0
【开源】QuickPager ASP.NET2.0分页控件——使用示例、基本应用和查询功能
1.2K0
【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库
7810
分页控件之分页算法 —— for SQL Server 版。
1.7K0
【自然框架】 之 资源角色——列表过滤方案(思路篇)
1K0
【8】数据浏览表格的快速输出
3.1K0
【自然框架】之通用权限(八):权限到字段(列表、表单、查询)
1.1K0
相关推荐
一个页面搞定几乎所有的列表需求的实现思路和一点代码。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档