ListVew真實分頁簡單測試

  • 2993
  • 0

ListVew真實分頁簡單測試

.FrameWork 3.5 之後,很多人習慣使用ListView+DataPager做分頁

但DataPager的分頁做法是將所有資料查詢出來後,

在透過DataPager.SetPageProperties 方法去設定顯示的範圍

 

意思就是說,如果你非得要用DataPager做分頁的話,就必須考量一下效能

 

By the way,這裡主要是要記錄一下真實分頁,並且不用DataPager,我們直接看Code吧


    int PageCount = 1;
    DataClassesDataContext data = new DataClassesDataContext();
    int PageIndex = 0;
    private string _PageString {get;set;}
    
    protected void Page_Load(object sender, EventArgs e)
    {
        RecordCount = data.LOG.Count(); 
        PageCount = (int)Math.Ceiling((decimal)RecordCount / 10); 
        int page = 1;
        if (!string.IsNullOrEmpty(Request.QueryString["page"]))
            page = Convert.ToInt16(Request.QueryString["page"]);
        PageIndex = (page - 1) * 10; 
       
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < PageCount; i++)
        {
            sb.AppendFormat(@" <a href=""?page={0}"">{0}</a> ", i);
        }
        _PageString = sb.ToString();
        Response.Write(_PageString);
        bind();
    }

    void bind()
    {   var q = (from c in data.LOG
                 select c 
        ).Skip(PageIndex).Take(10);
        this.ListView1.DataSource = q;
        this.ListView1.DataBind();
    }

接下來用EF+DataPager+SQLite看看是不是有同樣的效果


    int PageCount = 1;
    NorthwindModel.NorthwindEntities1 c =new NorthwindModel.NorthwindEntities1();
    int PageIndex = 0;    
    private string _PageString { get; set; }   

    protected void Page_Load(object sender, EventArgs e)
    {
        RecordCount = c.Orders.Count(); 
        PageCount = (int)Math.Ceiling((decimal)RecordCount / 10); 
        int page = 1;
        if (!string.IsNullOrEmpty(Request.QueryString["page"]))
            page = Convert.ToInt16(Request.QueryString["page"]);
        PageIndex = (page - 1) * 10; 

        
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < PageCount; i++)
        {
            sb.AppendFormat(@" <a href=""?page={0}"">{0}</a> ", i);
        }
        _PageString = sb.ToString();
        Response.Write(_PageString);
        bind();
     
    }

    private void bind()
    {       
        var cc = (from i in c.Orders
                 select new
                 {
                     OrderID = i.OrderID,
                     CustomerID = i.CustomerID,
                     EmployeeID = i.EmployeeID,
                     ShipName = i.ShipName,
                     ShipAddress = i.ShipAddress
                 }).OrderBy(x => x.OrderID).Skip(PageIndex).Take(10);

        ObjectQuery q = cc as ObjectQuery;       
        Response.Write(q.ToTraceString());

        ListView1.DataSource = cc;
        ListView1.DataBind();
    }

他也是很聰明的幫我們做到真實分頁

至於ListView+DataPager 有沒有辦法做到真實分頁呢?有知道的大大教學相長一下 ^___^