MVC学习(四)几种分页的实现(2)
2014-01-03 20:13
260 查看
在第一种分页方式中,仅仅实现了分页,但并未有体现出MVC的优势,没有体现出泛型编程思想,尤其在数据量很大的时候,分页十分缓慢,除此之外,还没有实现很好的封装,不是一个通用方法。
因此,我希望只要传入数据源以及页码数(采用泛型编程)便可以实现分页功能,且使用十分的方便。
下面就讲讲我的一些理解。
在泛型编程中,数据容器一般继承了IQueryable或者IEnumerable接口(此例中,数据源暂时继承了这两种接口)。
为了调用方法方便,我决定对这两个接口写扩展方法。
首先为了实现数据分页功能,我们常常需要考虑以下六个属性
总页数(TotalPage)、总数据量(TotalCount)、当前页码(PageIndex)、
一页显示数据多少(PageSize)以及上一页或者下一页(IsPreviousPage/IsNextPage)。
因此,基于对象属性,抽象出接口(IPageList),分页方法必须继承并实现这些属性。
接口IPageList代码如下
FY2(string GoFlag, string PageIndex)
分页后的效果如下
我插入了120万条数据,每页显示5条,在本机测试,分页还是蛮快的。
整个源程序点此下载,本例子是vs2010,MVC3,配置好数据库便可运行。
因此,我希望只要传入数据源以及页码数(采用泛型编程)便可以实现分页功能,且使用十分的方便。
下面就讲讲我的一些理解。
在泛型编程中,数据容器一般继承了IQueryable或者IEnumerable接口(此例中,数据源暂时继承了这两种接口)。
为了调用方法方便,我决定对这两个接口写扩展方法。
首先为了实现数据分页功能,我们常常需要考虑以下六个属性
总页数(TotalPage)、总数据量(TotalCount)、当前页码(PageIndex)、
一页显示数据多少(PageSize)以及上一页或者下一页(IsPreviousPage/IsNextPage)。
因此,基于对象属性,抽象出接口(IPageList),分页方法必须继承并实现这些属性。
接口IPageList代码如下
public ActionResult FY2(string GoFlag, string PageIndex) { int PageSize = 5; int TotalCount = LzsDB.MyTestPages.Count();//获得此数据表中数据记录数 double PageCount = Math.Ceiling((double)TotalCount / (double)PageSize);//获得总页数 int NowPageIndex = 1; if (!string.IsNullOrEmpty(PageIndex)) { int ErrorPageIndex = 1; if (!Int32.TryParse(PageIndex, out ErrorPageIndex))//如果不能转换成整数,则默认当前页码为1 { PageIndex = "1"; } NowPageIndex = Convert.ToInt32(PageIndex);// } GoFlag = string.IsNullOrEmpty(GoFlag) ? "First" : GoFlag; switch (GoFlag) { case "First": ViewBag.P2Index = 1; NowPageIndex = 1; break; case "Pre": ViewBag.P2Index = Convert.ToInt32(PageIndex) - 1; NowPageIndex = Convert.ToInt32(PageIndex) - 1; break; case "Next": ViewBag.P2Index = Convert.ToInt32(PageIndex) + 1; NowPageIndex = Convert.ToInt32(PageIndex) + 1; break; case "Last": ViewBag.P2Index = PageCount; NowPageIndex = Convert.ToInt32(PageCount); break; } var MyTestPagesList = LzsDB.MyTestPages.OrderBy(a => a.Id); return View(MyTestPagesList.ToPagedList(NowPageIndex, 5)); }
FY2(string GoFlag, string PageIndex)
分页后的效果如下
我插入了120万条数据,每页显示5条,在本机测试,分页还是蛮快的。
整个源程序点此下载,本例子是vs2010,MVC3,配置好数据库便可运行。
相关文章推荐
- MVC学习(四)几种分页的实现(3)
- MVC学习(四)几种分页的实现(1)
- 几种数据库分页查询的实现与比较
- mysql实现分页的几种方式
- 几种常见的分页查询实现方式
- 服务端实现分页效果的几种思路
- 【续】用ObjectDataSource实现自定义分页的心得总结,几种分页方法的性能对比
- 数据查询分页的几种实现方式
- sqlserver实现分页的几种方式
- 常用的几种 SQLServer 分页查询方式实现
- 几种分页的实现
- [置顶] SSH hibernate 分页的几种实现方式
- 几种分页查询的实现与比较
- Oracle数据库分页查询的几种实现方法
- 几种分页查询的实现与比较
- 几种分页的实现(3)
- JDBC实现数据库的几种基本操作(查询,分页查询,根据关键字进行查询以及插入数据)
- sql server 存储过程实现分页
- Spring自带的几种容器实现
- ListView.OnScrollListener监听listview滚到最底部,实现分页加载(本文第一部分转载,第二部分原创)