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

 

目的:

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联系起来,达到简化操作的目的,还有就是当增加(修改)了一个字段的时候,点几下鼠标就可以搞定!

 

 

时间: 2024-07-31 07:39:51

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

打造一个通用ASP.NET数据分页控件

asp.net|分页|控件|数据 对于几乎所有的数据表现Web应用来说,组织好数据的显示方式.避免给用户带来混乱的感觉就是最主要的目标之一.每个页面显示20条记录当然是可以接受的,但每页显示10000条记录就很容易给用户带来不便了.将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法. 一.慨述 ASP.NET本身只提供了一个支持数据分页的控件,即DataGrid分页控件,不过它比较适合Intranet环境使用,对于Internet环境来说,DataGrid分页控件提供的功能似

打造通用ASP.NET数据分页控件

asp.net|分页|控件|数据 对于几乎所有的数据表现Web应用来说,组织好数据的显示方式.避免给用户带来混乱的感觉就是最主要的目标之一.每个页面显示20条记录当然是可以接受的,但每页显示10000条记录就很容易给用户带来不便了.将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法. 一.慨述 ASP.NET本身只提供了一个支持数据分页的控件,即DataGrid分页控件,不过它比较适合Intranet环境使用,对于Internet环境来说,DataGrid分页控件提供的功能似

Winform分页控件重大更新,并实现普通版、DotNetBar、DevExpress三大版本整合更新(附各种例子源码)

在Winform开发中,一直离不开分页处理,好的分页控件封装,能为开发节省很多时间和繁琐工作,对分页控件一直的改进和完善,也是我的兴趣之一.本次主要实现对分页控件的全面重构,优化功能及界面的处理,并统一完成普通版.基于DotNetbar界面控件版本.DevExpress界面控件版本三大版本的发布,这几个界面版本,除了界面表现效果不一样外,所有的功能展示及使用代码完全一致,保证用户的知识投资及给客户良好的使用操作.本次主要增加的功能有:可通过界面设置列表显示的列,可复制选定的行信息,可设置显示的行

简单实现一个.net分页控件

最近写了一个.net的分页控件,放到园子里...你觉得好,就点个赞,不好呢,就告诉我为啥吧.... 是使用Request.QueryString的.... 参数: public int currentPageIndex = 0;//当前页数 public int pagesize = 16;//每页显示的条数 public int pagecount = 0;//页数 public int rowscount = 0;//总条数 public string prevtext = "前一页&quo

KMCT分页控件与存储过程分页完美结合---存储过程分页篇

上一篇分页控件(KCMT开源控件之--方便简洁的分页控件)出来以后,好几位网友期待我的存储过程分 页与该控件结合使用的例程,这个星期工作很忙,一直没有时间完成.今天终于抽出时间来完成这篇文章 . 首先从存储过程分页谈起 为什么要选择用存储过程分页呢?其实原因很简单,数据库查询功能的性能终究是有限的.即使我们 对数据库进行了最优配置,对数据表设计再三斟酌,然而一旦面临海量数据,且返回结果集较大的时候, 常规的查询语句就无能为力了.一般说来,当返回的结果集超过总数量的40%时,数据库层面上的优化就

跪求千万级oracle winform分页控件

问题描述 客户2年的数据量是150-200万,使用oracle数据库,.netC#开发,各位大侠有没有好的这个级别的分页控件,高分跪求 解决方案 解决方案二:分页控件跟数据量大小没太大关系,分页sql语句你自己写Wuqi.Webdiyer.AspNetPager这个分页控件就挺好的,百度一下,一堆例子解决方案三:和控件无关aspnetpager这个控件解决方案四:你不会想把所有数据都查出来在form上分页吧!应该是做个分页查询,一次只查询某一页的数据然后在返回显示到form上解决方案五:分页控件

基于JS分页控件实现简单美观仿淘宝分页按钮效果_javascript技巧

最新版本代码请移步到https://github.com/pgkk/kkpager 在线测试链接:http://pgkk.github.io/kkpager/example/pager_test.html 分页按钮思想: 1.少于9页,全部显示 2.大于9页,1.2页显示,中间页码当前页为中心,前后各留两个页码 附件中有完整例子的压缩包下载.已更新到最新版本 先看效果图: 01输入框焦点效果 02效果 模仿淘宝的分页按钮效果控件kkpager JS代码: Js代码 var kkpager = {

基于Bootstrap仿淘宝分页控件实现代码_javascript技巧

大家都应该上过淘宝的吧,没有上过淘宝的同学估计也没几个了,但是我相信大多数的人都是在淘宝上面买完东西就下线,很少有人会关注淘宝上的设计这类的,但是对于普通人这样还行,但是对于一个程序员这样就可不行了,因为博主本人是从事前端方面的工作,所以就通过仿照淘宝的设计样式,以求在技能上面能够有一个大的突破 一.淘宝分页控件了解 先上一张淘宝的分页图片: 根据上图中对淘宝分页控件的分析,我们大致上可以将淘宝分页控件分成两部分,一部分是核心部分,这一部分主要就是一个分页的核心功能,这个功能同时也是也是不可或缺

Winform 通用分页控件实战篇(提供源码下载)

在Web中,以前写过相关的分页控件的实例教程,如: 分页控件 实战 Post篇 (包源码的)   在Winform中,分页有时候也是必不可少的一项,因此, 新手Mark一下有时候是必要的.   下面开始简单介绍一下:   既然是分页控件,说明它是个控件,因此,继承控件继承自用户控件如下:  public partial class PagerControl : UserControl  {         #region 构造函数         public PagerControl()