• 分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库


        这里要说的不仅仅是一个分页控件,而是一套解决方案,包括如何显示数据、显示分页导航,如何得到分页用的sql语句(等效于存储过程),如何提取数据,如何绑定控件,如何响应事件,添加、修改、删除数据后如何更新,如何查询数据等等。一整套完整的解决方案。

        这个方案要有几个特点

          1、支持多种数据库,可以提供多个分页算法以便于支持多种数据库。

          2、可以在不同的要求下选用最优的分页算法。比如如果只需要按照主键排序,那么选择Max分页算法无疑是最快的一种分页算法。

          3、按需所取。不管是哪一种分页算法,都要达到按需所取。假设一页显示20条记录,那么从数据库里面最多只提取20条记录,不可以多取一条。

          4、使用简单。无论是更换分页算法,更换数据库,还是处理分页的事件,都是很简单的几行代码即可搞定。

          5、很方便的实现数据查询的功能。查询后显示数据,查询后修改、删除数据,修改、删除后重新显示数据等。

          6、每一个部分都可以替换。

          7、支持海量数据。无论数据多还是少,都要适合,而且要尽量快。

        分页解决方案的组成部分

          显示数据的控件、分页控件、分页算法、数据访问函数库、数据库 

          如:GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + SQL Server2000

          1、显示数据的控件可以是GridViewDetailsViewFormViewRepeaterDataGridDataListCheckBoxListRadioButtonList等。(控件的继承关系可以看这里http://www.cnblogs.com/jyk/archive/2009/04/29/1446033.html 这是.net 里面带的几个常用控件的继承树)。也可以支持直接返回DataTable等记录集。

          2、分页控件,可以是QuickPager也可以是吴旗娃的分页控件,也可以是EasyTools等其他的分页控件。

          3、分页算法目前还没有发现同类的,硬要算的话,储存过程有一点点类似。

          QuickPager_SQL  原来是QuickPager里面的一部分,现在独立出来,可以单独使用了。

          4、数据访问函数库可以换成SQLHelp、微软的企业库等,当然需要其他的实现一个接口(IDALforPager)。

          5、数据库可以是AccessExcelSQL Server,理论上也支持OrcaleMySQL等,只是没有安装这些数据库,所以还没有具体实现。

          (至于ORM嘛,不是太了解,不知道能不能和哪个部分替换。)

          各个部分之间的关系

          1QuickPagerQuickPager_SQL

          这个就像SqlCommandSqlConnection的关系一样。      

    SqlConnection cn = new SqlConnection();
    SqlCommand cm 
    = new SqlCommand();
    cm.Connection 
    = cn;
    cm.Connection.Open();

          同样,QuickPager 里面一个一个成员的类型就是PagerSQL(也就是QuickPager_SQL)。

          

          2QuickPagerDataAccessLibrary

          他们是通过一个接口(IDALforPager)联系在一起的,

          

    Code

          3QuickPager与显示数据的控件

          为了便于使用,就是说想在使用的时候尽量的少写代码,所以我是把显示数据的控件传递到了分页控件里面,然后在需要绑定控件的时候,采用as的方式来判断是哪种控件,然后在强制转换,最后实现绑定控件的目的。研究了一下.net里的一些控件的继承关系,发现虽然控件很多,但是我只需要做三次判断就可以了,这就是基类的好处吧。

    Code

          4QuickPager_SQLDataAccessLibrary、显示数据的控件没有任何关系。

          5QuickPagerQuickPager_UI

          QuickPager_UI 也是分页控件的一个成员,因为至少有三种分页方式(PostBackURLXMLHttp),所以呢我采用了基类和子类的方式来实现这种需求,以达到可以随时扩展的需求。

      

        分页解决方案从使用方法的角度来说,有两种方式

            第一种就是“自动运行”,设置属性,其他的就不用管了(仅限于QuickPager,其他的分页控件可能不支持);

            另一种是“手动运行”,手动运行就要多做一些事情了(其他分页控件的情况)。

        分页解决方案从提交数据的角度,有三种方式。

              PostBackURLXMLHttp。当然这三种也是针对于QuickPager来说的,其他的分页控件是否支持,就看作者的了。

        使用方法:

          时间比较紧,所以这里先说一下使用方法是自动运行、PostBack的情况。

                1、一般显示数据

    protected override void OnInit(EventArgs e)
            
    {
                
    base.OnInitComplete(e);
                
    //数据访问函数库
                DataAccessLibrary dal = DALFactory.CreateDAL();
                Pager1.DAL 
    = dal;
                
                
    //定义QuickPager_SQL
                PagerSQL pagerSQL = PagerSQL.Create(PagerSQLKind.MaxMin);
                pagerSQL.Page 
    = this;
                Pager1.ManagerPageSQL 
    = pagerSQL;

                Pager1.ShowDataControl 
    = this.GV;       //设置显示数据的控件
                
            }

            
    protected void Page_Load(object sender, EventArgs e)
            
    {
                
                
    if (!Page.IsPostBack)
                
    {
                    SetPagerInfo();         
    //设置表名、字段名等
                }

            }


            
    给QuickPager_SQL 设置属性,以便拼接SQL

                2、查询数据

     处理查询数据的情况

                3、添加、修改、删除后重新显示数据

     添加后重新显示数据

            
    修改数据后重新显示当前页的数据

            
    添加后重新显示数据

          

          关于三层

          现在三层还是很流行的,那么我的这个算不算是三层呢?其实算不算对于我来说是无所谓的事情,又没有谁规定,现在写项目必须三层(或者MVC),否则就是不合格产品。既然没有这个规定,那么我又为何要在乎是否可以靠到三层结构上呢?

          另外呀,我觉得这么写代码挺简单的,要说简化,还确实是有简化的空间,但是说要往三层结构上面靠拢,我还确实不知道应该怎么做。

          就像http://www.cnblogs.com/wisdomqq/archive/2009/04/29/1446579.html 里说的,“经常看到有的朋友使用三层结构或者MVC模式,比较生硬,强行进行拆分代码,使得业务代码分散在各个角落,反而更难阅读和维护了。”

           我觉得这么写,对于简单的应用是没有什么问题的,当然了复杂的情况是有其他的方法来解决的。

    代码下载:

    http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html

    ps:今天先写这么多,以后再详细说明。

  • 相关阅读:
    json的序列化与反序列化
    Npoi简单读写Excel
    Halcon一维运算相关算子整理
    C#委托的介绍(delegate、Action、Func、predicate)
    设计模式
    Halcon 和 C# 联合编程
    UVA-11324 The Largest Clique (强连通+DP)
    UVALive-4287 Proving Equivalences (有向图的强连通分量)
    UVALive-5135 Mining Your Own Business (无向图的双连通分量)
    UVALive-3523 Knights of the Round Table (双连通分量+二分图匹配)
  • 原文地址:https://www.cnblogs.com/jyk/p/1447147.html
Copyright © 2020-2023  润新知