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

龍都國際電子娛樂:實現LINQ通用分頁綁定方法

?

在LINQ中,IQueryable 接口和IEnumerable 接口都分手供給了Skip措施和Take措施,用來做分頁異常相宜.是以我就想用他們做一個分頁控件,由于IQueryable是承襲自 IEnumerable的。是以應用接口僅必要針對后者就可以了。應用的時刻只需供給數據源、綁定的GridView的、每頁大年夜小即可?,F在問題就出了在數據源上,要求用戶供給一個數據源類型,即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() 會喪掉一點點的效率。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户