2010-03-03 70 views
3

是否有任何內置的IEnumberable分頁函數(或更好的庫使用)?我知道有>(),但我發現自己反覆實施基本計算來確定給定頁面大小的頁數。我意識到這是簡單的實現,但這就是爲什麼我希望它已經在圖書館,我只是錯過了它。尋呼IEnumerable數據集

通過分頁我的意思是一個指向當前記錄的指針,並滿足以下概念。

.PageSize < - 獲取/設置頁面大小 。去年< - 最後一頁 .Current < - 當前頁面 .JumpTo(PAGENUMBER)

與故障保險櫃,以確保您在正確的結束如果頁面大小或設置大小發生變化,則放置

回答

2

您可以使用圍繞列表by Rob ConeryPagedList包裝。還有一個由Troy Goode擴展版本。

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace System.Web.Mvc 
{ 
    public interface IPagedList 
    { 
     int TotalCount 
     { 
      get; 
      set; 
     } 

     int PageIndex 
     { 
      get; 
      set; 
     } 

     int PageSize 
     { 
      get; 
      set; 
     } 

     bool IsPreviousPage 
     { 
      get; 
     } 

     bool IsNextPage 
     { 
      get; 
     }  
    } 

    public class PagedList<T> : List<T>, IPagedList 
    { 
     public PagedList(IQueryable<T> source, int index, int pageSize) 
     { 
      this.TotalCount = source.Count(); 
      this.PageSize = pageSize; 
      this.PageIndex = index; 
      this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList()); 
     }  

     public PagedList(List<T> source, int index, int pageSize) 
     { 
      this.TotalCount = source.Count(); 
      this.PageSize = pageSize; 
      this.PageIndex = index; 
      this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList()); 
     } 

     public int TotalCount  
     { 
      get; set; 
     } 

     public int PageIndex  
     { 
      get; set; 
     } 

     public int PageSize 
     { 
      get; set; 
     } 

     public bool IsPreviousPage 
     { 
      get 
      { 
       return (PageIndex > 0); 
      } 
     } 

     public bool IsNextPage 
     { 
      get 
      { 
       return (PageIndex * PageSize) <=TotalCount; 
      } 
     }   
    } 

    public static class Pagination 
    { 
     public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index, int pageSize) 
     { 
      return new PagedList<T>(source, index, pageSize); 
     } 

     public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index) 
     { 
      return new PagedList<T>(source, index, 10); 
     }   
    } 
} 
+0

看起來很完美,這正是我一直在尋找 – 2010-03-03 22:44:46

+0

在第二腮紅,它缺少一些項目,但它是一個良好的開端。 – 2010-03-03 22:50:20

+0

增加了一個稍微擴展版本的鏈接。不過,我認爲你可以從這個基地實施你的要求。 – AxelEckenberger 2010-03-03 22:58:01