LINQ通用分页绑定方法的实现
2010-10-09 18:33
330 查看
在LINQ中,IQueryable 接口和IEnumerable 接口都分别提供了Skip方法和Take方法,用来做分页非常合适.因此我就想用他们做一个分页控件,因为IQueryable 是继承自 IEnumerable 的。因此使用接口仅需要针对后者就可以了。使用的时候只需提供数据源、绑定的GridView的、每页大小即可。现在问题就出了在数据源上,要求用户提供一个数据源类型,即IQueryable 接口和IEnumerable 接口? T是可确定类型(已知类型)的话还可以,若T是匿名类型,如
var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country };
list的类型只有在运行时才能得到,怎么办呢!其实很简单我,我们可以使用 “参数推导泛型类型”的方法来实现:
看下面的代码(因为重点不在这里所以 代码写的比较粗糙):
public void BindBoundControl(IEnumerable DataSource, GridView BoundControl, int PageSize)
{
//获取总记录数(这里可以使用参数传入总页数 就不必每次都执行下面方法)
int totalRecordCount = DataSource.Count();
//计算总页数
int totalPageCount = 0;
if (PageSize == 0)
{
PageSize = totalRecordCount;
}
if (totalRecordCount % PageSize == 0)
{
totalPageCount = totalRecordCount / PageSize;
}
else
{
totalPageCount = totalRecordCount / PageSize + 1;
}
//从参数中获取当前页码
int CurrentPageIndex = 1;
//如果从参数中获取页码不正确 设置页码为第一页
if (!int.TryParse(HttpContext.Current.Request.QueryString["Page"], out CurrentPageIndex) || CurrentPageIndex <= 0 || CurrentPageIndex > totalPageCount)
{
CurrentPageIndex = 1;
}
//绑定数据源
BoundControl.DataSource = DataSource.Skip((CurrentPageIndex - 1) * PageSize).Take(PageSize);
BoundControl.DataBind();
}
var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country };
list的类型只有在运行时才能得到,怎么办呢!其实很简单我,我们可以使用 “参数推导泛型类型”的方法来实现:
看下面的代码(因为重点不在这里所以 代码写的比较粗糙):
public void BindBoundControl(IEnumerable DataSource, GridView BoundControl, int PageSize)
{
//获取总记录数(这里可以使用参数传入总页数 就不必每次都执行下面方法)
int totalRecordCount = DataSource.Count();
//计算总页数
int totalPageCount = 0;
if (PageSize == 0)
{
PageSize = totalRecordCount;
}
if (totalRecordCount % PageSize == 0)
{
totalPageCount = totalRecordCount / PageSize;
}
else
{
totalPageCount = totalRecordCount / PageSize + 1;
}
//从参数中获取当前页码
int CurrentPageIndex = 1;
//如果从参数中获取页码不正确 设置页码为第一页
if (!int.TryParse(HttpContext.Current.Request.QueryString["Page"], out CurrentPageIndex) || CurrentPageIndex <= 0 || CurrentPageIndex > totalPageCount)
{
CurrentPageIndex = 1;
}
//绑定数据源
BoundControl.DataSource = DataSource.Skip((CurrentPageIndex - 1) * PageSize).Take(PageSize);
BoundControl.DataBind();
}
相关文章推荐
- 非常简单的实现LINQ通用分页绑定方法
- LINQ体验(三)实现LINQ通用分页绑定方法
- Linq中使用反射实现--LINQ通用数据表绑定DataGrid控件的方法(原创)
- gridview动态绑定dataset无法实现分页的解决方法
- ASP.NET长文章实现通用以及高效的分页方法
- Linq中可实现分页的功能方法
- Asp.net实现通用以及高效的分页方法
- 绑定Repeater控件的通用方法(包括分页事件)
- 利用 LINQ的skip和Take 方法对List实现分页效果
- Asp.net实现通用以及高效的分页方法
- Linq通用分页数据查询方法
- 6、实现通用分页功能二(实现通用分页查询的业务方法)
- hibernate分组查询后,求分组总数的实现方法(管理系统分页)
- DAO层实现分页的方法.代码作为记录.
- 不同数据库的分页查询实现方法总结
- [百万级]通用分页存储过程.[千万级]实现千万级数据的分页显示!
- 通用分页实现及其OO设计探讨
- 【积分系统】--Linq表达式实现分页
- --TOP n 实现的通用分页存储过程(转自邹建)
- java执行SQL语句实现查询的通用方法