LINQ通用分页绑定方法的实现

在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();
  }

 

转载于:https://www.cnblogs.com/bihailantian/archive/2010/10/09/1846823.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值