?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

黄金岛安卓手机版长沙麻将:龙都国际电子娱乐:实现LINQ通用分页绑定方法

?

长沙转转麻将必胜口诀 www.fv7j.com.cn 在LINQ中,IQueryable 接口和IEnumerable 接口都分手供给了Skip措施和Take措施,用来做分页异常相宜.是以我就想用他们做一个分页控件,由于IQueryable是承袭自 IEnumerable的。是以应用接口仅必要针对后者就可以了。应用的时刻只需供给数据源、绑定的GridView的、每页大年夜小即可。现在问题就出了在数据源上,要求用户供给一个数据源类型,即IQueryable 接口和IEnumerable 接口? T是可确定类型(已知类型)的话还可以,若T是匿名类型,如

var list = from it in de.Customers whe龙都国际电子娱乐re it.City == "abc" select new { it.City, it.Country };

list的类型只有在运行时才能获得,怎么办呢!着实很简单我,我们可以应用 “参数推导泛型类型”的措施来实现:

看下面的代码(由于重点不在这里以是 代码写的对照粗拙):

public void BindBoundControl(IEnumerable DataSource, GridView B龙都国际电子娱乐oundControl, 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  totalPageCount)

{

CurrentPageIndex = 1;

}

//绑定命据源

BoundControl.DataSource = DataSource.Skip((CurrentPageIndex - 1) * PageSize).Take(PageSize);

BoundControl.DataBind();

}

调用

protected void龙都国际电子娱乐 Page_Load(object sender, EventArgs e)

{

NorthwindEntities de = new NorthwindEntities();

BindingUtils bind = new BindingUtils();

//先排序与一下再绑定

bind.BindBoundControl(de.Customers.OrderBy(v=>v.CustomerID), this.GridView1, 10);

}

下面我们只是必要重载一下我们的分页措施实现“参数推导泛型类型”就可以了 代码如下:

public void BindBoundControl(IEnumerable DataSource, TSource type, GridView BoundControl, int PageSize)

{

this.BindBoundControl(DataSource, BoundControl, PageSize);

}

调用

protected void Page_Load(object sender, EventArgs e)

{

NorthwindEntities de = new NorthwindEntities();

var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country };

BindingUtils bind = new BindingUtils();

bind.BindBoundControl(list.OrderBy(c=>c.City), list.FirstOrDefault(), this.GridView1, 10);

}

这个措施很简单的 只是经由过程 list.FirstOrDefault() 做参数 来推导 措施中 BindBoundControl 的TSource 就可以了,当然由于每次分页时都邑履行 list.FirstOrDe龙都国际电子娱乐fault() 会丧掉一点点的效率。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: