• 自己编写的操作实体类的分页控件, 实现页码层与数据库的具体的信息隔离


    目前网络上有很多成熟的分页控件, 不过很多都是基于Sql语句进行分页, 而且直接绑定到分页控件中, 不能通过实体集合进行绑定, 因此不是很适合我目前项目的架构开发, 偶然一次机会在博客上看到有"永不言拜"先生发表的Sqlserver存储过程和C#分页类简化你的代码! 一文, 深受启发, 结合我正在使用的架构写了一个分页控件。

    分页控件在Web开发中是不可或缺的一个控件, 但目前很多分页控件, 是通过设置Sql语句的方式进行分页, 这种方式的分页控件的缺点是和数据库紧密联系一起, 需要定制输出内容的时候, 需要绑定数据库字段的名称, 而且需要在底层拼接Sql语句以供分页控件调用. 在分层比较明显的架构中, 这种从界面层直接到数据库底层的操作破坏了分层的优雅和特点.
    如果能够利用分页控件的专有特点(易用/分页检索)和分层架构的特点(共享实体类, 隔离底层和细节), 使得分页控件布局的时候访问的是实体类的信息, 而有可以按页进行数据检索, 那么就可以完美解决这个问题.

    我在业余时间一直希望能够解决这个问题, 通过不断的摸索以及对分页控件的分析研究, 终于较好的解决了目前架构中采用的分页控件所存在的一些不足, 希望能够在将来的项目中使用.
    该分页控件在数据库层是通过一个存储过程进行分页的计算处理, 在数据访问层通过代码调用存储过程进行获取记录数或记录数据, 每个层通过一个分页控件的实体类进行数据传递, 实现分页控件所需信息的传递.
    控件的效果如下所示:代码请在在连接http://www.wuhuacong.com.cn/UpLoadFile/PagerDemo.zip 下载
    分页控件示例
    附件中包括了通过分页的存储过程脚本, 控件代码, 控件传递实体, 业务逻辑代码, 页面测试代码.
    /// <summary>
            
    /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
            
    /// </summary>
            
    /// <param name="condition">查询的条件</param>
            
    /// <param name="info">分页实体</param>
            
    /// <returns>指定对象的集合</returns>

            protected virtual ArrayList BaseFind(string condition, PagerInfo info)
            
    {
                ArrayList list 
    = new ArrayList();

                PagerHelper helper 
    = new PagerHelper(tableName, condition, ConnectionString);
                info.RecordCount 
    = helper.GetCount();

                PagerHelper helper2 
    = new PagerHelper(tableName, false" * ", primaryKey,
                    info.PageSize, info.CurrenetPageIndex, 
    false, condition, ConnectionString);

                
    using (IDataReader dr = helper2.GetDataReader())
                
    {
                    
    while (dr.Read())
                    
    {
                        list.Add(
    this.DataReaderToEntity(dr));
                    }

                }

                
    return list;
            }

    /// <summary>
      
    /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
      
    /// </summary>
      
    /// <param name="condition">查询的条件</param>
      
    /// <param name="info">分页实体</param>
      
    /// <returns>指定对象的集合</returns>

      public ProductsCollection Find(string condition, PagerInfo info)
      
    {
       ProductsCollection products 
    = new ProductsCollection();
       products.AddRange(
    base.BaseFind(condition, info));
       
    return products;
      }



    //页面后台调用代码如下:
    private void SearchData()
      
    {
       PagerInfo info 
    = Pager1.PagerInfo;
       Pager1.DataSource 
    = product.FindByProductName(this.txtProductName.Text, info);
       Pager1.PagerInfo 
    = info;
       Pager1.DataBind();
      }

     
    public void PageIndexChanged(object sender, Pager.PageIndexChangedEventArgs e)
      
    {
       SearchData();
      }

      
    private void btnSearch_Click(object sender, System.EventArgs e)
      
    {
       Pager1.CurrentPageIndex 
    = 1;
       SearchData();
      }

    希望对大家有帮助!!
    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    JavaScript 设计模式系列 : 单例(Singleton)模式
    JavaScript 设计模式系列 : 工厂模式
    《Python数据分析常用手册》一、NumPy和Pandas篇
    python字符串的方法及注释
    量化投资_TB交易开拓者A函数和Q函数常见组合应用
    凯利公式
    python数据分析入门学习笔记
    VBA语言基础
    VBA遍历文件夹下文件文件实用源码
    如何判断单链表里面是否有环【转载】
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/514710.html
Copyright © 2020-2023  润新知