AspNetPager第三方分页控件介绍

AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。

AspNetPager的主要功能
1、支持通过Url进行分页
2、支持Url分页方式下的Url重写(UrlRewrite)功能
3、支持使用用户自定义图片做为导航元素
4、功能强大灵活、使用方便、可定制性强
5、增强的 Visual Studio 2005、Visual Studio 2008和Visual Studio 2010设计时支持
6、丰富而完整的控件文档和示例项目
AspNetPager使用示例

首先在VS中添加对AspNetPager.dll的引用,右键工具栏,选择"选择项" ,如图:

这个过程时间可能会有点长,需要等待,然后在弹出的对话框中选择本地文件夹中的AspNetPager.dll文件,点击打开,之后就将这个控件添加到了VS2010的工具栏中了,如图:

然后就可以将该分页控件拖拉到页面需要使用分页控件的地方,效果如图:

点击右边的小三角形可以进行控件显示的设置和存储过程的配置,如图:

这里一些导航文字,信息取显示方式,索引文本的设置就不再赘述了,设置比较简单,直接贴效果:

下面讲讲存储过程生成工具项的设置,点击该项,效果如图: 

然后来看看自动生成的T-SQL语句,语句此处不做解释,直接点执行,在数据库中添加该存储过程即可

个人在使用的时候,没用用到@docount bit该参数,故在下面的介绍中,我使用的存储过程中把该参数删除了。。。

好了,存储过程准备就绪了,就开始看代码了,首先来看看现在分页控件的html源代码:

然后需要再进行手动的配置,个人比较喜欢直接在代码里配置属性,当然也可以在属性栏进行配置,我们需要加上三个属性:

PageSize:每页显示的数目大小(也可以在后台代码端设置)

LayoutType:呈现方式,有Div方式和表格方式

AlwaysShow:分页时会出现一种情况,就是用户的数据数量小于每页显示的数据数目,这时,会默认不显示分页控件,如果用户设置强制显示,就将该属性设为true即可

经过以上过程,页面及页面端的设置已经完成了,接下来要开始书写后台代码了,直接贴代码:

BLL层:

Getpages方法:

View Code

 1 /// <summary>
 2         /// 获取分页的数据
 3         /// </summary>
 4         /// <param name="startPage">起始页</param>
 5         /// <param name="endPage">结束页</param>
 6         /// <returns></returns>
 7         public List<CustomerInfo> GetPages(int startPage, int endPage)
 8         {
 9             return IcustomerDal.GetPages(startPage, endPage);
10         }

GetCount方法:

View Code

1 /// <summary>
2         /// 返回总的记录数
3         /// </summary>
4         /// <returns></returns>
5         public int GetCount()
6         {
7             return IcustomerDal.GetCount();
8         }

IDAL接口层:

View Code

 1 namespace PetShopDemo.IDAL
 2 {
 3     public interface ICustomerInfoDAL
 4     {
 5 
 6         int GetCount();
 7         List<CustomerInfo> GetPages(int startPage, int endPage);
 8 
 9         
10     }
11 }

DAL层:

GetPages() 方法:

View Code

 1  //获取分页的数据
 2         public List<CustomerInfo> GetPages(int startPage, int endPage)
 3         { 
 4             SqlParameter[] parameters=
 5             {
 6                 new SqlParameter("@startIndex",startPage),
 7                 new SqlParameter("@endIndex",endPage)
 8             };
 9 
10             DataSet ds = DbHelperSQL.GetDataSetByProc(CommandType.StoredProcedure, "proc_CustomerInfo_Fy", parameters);
11             List<CustomerInfo> customerInfos = new List<CustomerInfo>();
12             CustomerInfo customer = null;
13 
14             DataTable dt=ds.Tables[0];
15 
16             int Count = dt.Rows.Count;
17 
18             for (int i = 0; i < Count; i++)
19             {
20                 customer = new CustomerInfo();
21                 customer.CustomId = dt.Rows[i]["CustomId"].ToString();
22                 customer.CustomName = dt.Rows[i]["CustomName"].ToString();
23                 customer.CompanyAddr = dt.Rows[i]["CompanyAddr"].ToString();
24                 customer.Tel = dt.Rows[i]["Tel"].ToString();
25                 customer.Memo = dt.Rows[i]["Memo"].ToString();
26 
27                 customerInfos.Add(customer);
28             }
29 
30             return customerInfos;
31         }
32     }

GetCount() 方法:

View Code

1  //返回总的记录数
2         public int GetCount()
3         {
4             string sql = "select count(*) from CustomInfo";
5             int result = (int)DbHelperSQL.GetSingle(sql);
6             return result;
7         }

Utility层:

GetSingle() 方法:

View Code

 1  /// <summary>
 2         /// 执行一条计算查询结果语句,返回查询结果(object)。
 3         /// </summary>
 4         /// <param name="SQLString">计算查询结果语句</param>
 5         /// <returns>查询结果(object)</returns>
 6         public static object GetSingle(string SQLString)
 7         {
 8             using (SqlConnection connection = new SqlConnection(connectionString))
 9             {
10                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
11                 {
12                     try
13                     {
14                         connection.Open();
15                         object obj = cmd.ExecuteScalar();
16                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
17                         {
18                             return null;
19                         }
20                         else
21                         {
22                             return obj;
23                         }
24                     }
25                     catch (System.Data.SqlClient.SqlException e)
26                     {
27                         connection.Close();
28                         throw e;
29                     }
30                 }
31             }
32         }

GetDataSetByProc() 方法:

View Code

 1  /// <summary>
 2         /// 获取DataSet数据集(通过存储过程)
 3         /// </summary>
 4         /// <param name="type">CommandType类型</param>
 5         /// <param name="procName">存储过程名</param>
 6         /// <param name="parameters">参数</param>
 7         public static DataSet GetDataSetByProc(CommandType type, string procName, params SqlParameter[] parameters)
 8         {
 9             using (SqlConnection conn = new SqlConnection(connectionString))
10             {
11                 conn.Open();
12                 using (SqlCommand cmd = new SqlCommand())
13                 {
14                     cmd.Connection = conn;
15                     cmd.CommandText = procName;
16                     cmd.CommandType = type;
17                     cmd.Parameters.AddRange(parameters);
18                     using (SqlDataAdapter da = new SqlDataAdapter(cmd))
19                     {
20                         using (DataSet ds = new DataSet())
21                         {
22                             try{ da.Fill(ds);return ds; }
23                             catch (SqlException)
24                             {
25                                 return null;
26                             }
27                             finally
28                             {
29                                 conn.Close();
30                             }
31                             
32                         }
33                     }
34                 }
35             }
36         }

最后是UI层的调用:

首先页面一开始载入的时候就要对分页控件进行绑定 以及对Repeater控件数据源进行绑定

一开始页面Page_Load时就调用BindCustomInfo()自定义绑定方法:

View Code

1 protected void Page_Load(object sender, EventArgs e)
2     {
3         if (!IsPostBack)
4         {
5             //调用自定义绑定方法
6             BindCustomInfo();
7         }
8     }

BindCustomInfo() 方法:

View Code

 1  //自定义载入绑定
 2     public void BindCustomInfo()
 3     {
 4         //设置分页控件的总页数
 5         AspNetPager1.RecordCount = new CustomerInfoBLL().GetCount();
 6         //每页显示数目
 7         int pageSize=AspNetPager1.PageSize;
 8         //当前页索引
 9         int currentPage=AspNetPager1.CurrentPageIndex;
10         //根据分页控件的当前索引页和每页大小来获取对应数据集 绑定repeater控件数据源
11         CustManRepeater.DataSource = new CustomerInfoBLL().GetPages(pageSize * (currentPage - 1)+ 1, pageSize * currentPage);
12         //绑定方法
13         CustManRepeater.DataBind();
14     }

最重要的是不要忘记了,每当分页控件的索引页发生变化时都要进行数据的重新获取和绑定,所以要给分页控件添加PageChanged事件,在该事件中添加自定义绑定事件:

View Code

1 protected void AspNetPager1_PageChanged(object sender, EventArgs e)
2     {
3         //调用自定义绑定方法
4         BindCustomInfo();
5     }

至此,这个分页控件的全部设置算是大致完成了,接下来测试,看看效果:

首先第一页:

点击下一页:

呵呵,,其他的就不测试了,都没有问题,至此,整个分页就完成了,,,

当然这个样式可以自行更改,我这个比较寒酸了点了,,呵呵,,,

分页控件下载地址:

/Files/holyknight-zld/AspNetPager/AspNetPager732DLL.rar

转载于:https://www.cnblogs.com/holyknight-zld/archive/2012/07/11/kj_aspnetpager.html

小试牛刀_浅谈AspNetPager在三层架构中的使用相关推荐

  1. mysql cdc采集_浅谈CDC在微服务中的应用

    原标题:浅谈CDC在微服务中的应用 CDC(Change Data Capture)是一种通过监测数据变更(变更包括新增.修改.删除等)而对变更的数据进行进一步处理的一种设计模式,通常应用在数据仓库以 ...

  2. python竞赛_浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  3. 幼儿园案例经验迁移_浅谈在幼儿园数学教学中如何为迁移而教

    浅谈在幼儿园数学教学中如何为迁移而教 前言 培养能力.发展智力是我们教学的重要目标,而学习的迁移则可以说是检验教学是否达到这个目标的最可靠的指标.为迁移而教是当今教育界流行的一个很有吸引力的口号.但遗 ...

  4. 浅谈 MVC与三层架构

    引言: 使用Eclipse开发工具写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下.src下可以建很多包 ...

  5. 浅谈Squid在图片存储架构中的应用

    从我的独立博客中同步过来的,一起探讨 将近快一个月没写文章了,太懒散了,今天振作了一下,写了篇关于Squid的文章,Squid作为分布式代理缓存服务器真的非常的棒,希望本文对你有帮助. 版权声明:非商 ...

  6. vue 一个页面多个router-view如何配置子路由_浅谈vue前端开发架构

    通常我们开发出来的网页大都是通过.html文件,渲染与浏览器,也就是UI呈现给用户的. 一个UI page,一般会涉及到资源文件,样式排版,UI交互: 多个UI page,就涉及到UI交互响应: 那么 ...

  7. python应用实例论文_浅谈Python在科学计算中的应用

    55 SYS PRACTICE 系统实践 有效的计算工具能为工作提高效率,Python 在实际工作与 科学调研中等运用的也越来越广泛,通过专家不断的研究与分 析,通过 Python 进行科学计算是再合 ...

  8. python在园林中的应用_浅谈环境艺术在城市园林中的应用

    梁仟议华海新 摘要:环境艺术起源于人对自然环境的美化.改善和利用自然改善环境这两种需求.自从人类掌握了种植术后,建立起了菜园.果园.苗圃:学会饲养后,围成了牧园.环境艺术就开始植根于人类这些最早的造园 ...

  9. java百度地图路线规划_浅谈百度地图WEB开发中的四种路线规划

    百度地图在3.0的Javascript api中增加了四种路径规划,分别是:步行.骑行.自驾.公交. 关于路线规划的引用也相当简单,我们以步行为例://实例化地图 var map = new BMap ...

最新文章

  1. flashcom中远程共享对象SharedObject的用法
  2. Qt工作笔记-QTreeWidget中调用setHeaderItem设置头后,不能addChild
  3. Primefaces Spring和Hibernate集成示例教程
  4. Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)
  5. 指定的服务已经标记为删除_全球70%的“根服务器”设在美国,为避免关网,中国已经在行动!...
  6. .net中序列化读写xml方法的总结
  7. [JSOI2012]玄武密码 题解(AC自动机)
  8. 华为机试4.20:新员工考试
  9. Linux c 地址空间 堆栈 数据段 代码段 变量存储位置
  10. hdmi接口有什么用_显示器有哪些接口?DP、HDMI、VGA、DVI有什么区别?
  11. 网络其他计算机无法访问,win7局域网别人无法访问我的电脑是为什么_win7其他电脑无法访问我的电脑如何修复-win7之家...
  12. 前端工程师需要学习ps 吗_前端人员一定要掌握的PS技巧
  13. 51单片机 Proteus仿真 基于单片机的篮球计分器设计 LCD
  14. 一分钟读懂PDCA 循环
  15. python基础 - pip 安装与升级
  16. TCP调用listen处于监听状态,listen的第二个参数含义
  17. Win10 年度最重大更新:代码、理想与爱
  18. ARM Fast Model下 u-boot调试(三)---搭建基于ds-5的fvp模拟器环境
  19. 蔡司影像,品阅时光:年度影像旗舰vivo X70系列发布
  20. 淘宝助理导出的csv文件使用的是什么编码,您猜?

热门文章

  1. 医学图像体渲染照明2 体照明模型
  2. 3.TransposedConv2d实现 (含dilation)
  3. 微分算子法,拉普拉斯变换与卷积
  4. Edge正式版可以启用ClearType了,低分屏必开
  5. 局域网出现IP地址冲突攻击
  6. Python|“套娃”算法-递归算法解决全排列
  7. MVC中使用Action全局过滤器出现:网页无法正常运作 将您重定向的次数过多。解决办法
  8. 一个价值10亿的教训
  9. windows下G++的安装配置与使用
  10. 21款最优秀的开源数据库