Linq实现GridView高效分页(Skip() and take())


1.页面代码

Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title></title>
</head>
<body>
    
<form id="form1" runat="server">
    
<asp:GridView  ID="grdView"  runat="server">
    
</asp:GridView>
            
<asp:Label runat="server" ID="lblRowsCount"></asp:Label>
            
<asp:Button ID="btnFirst" Text="首页" runat="server" OnClick="btnFirst_Click">
            
</asp:Button>
            
<asp:Button ID="btnPre" Text="上一页" runat="server" OnClick="btnPre_Click">
            
</asp:Button>
            
<asp:Button ID="btnNext" Text="下一页" runat="server" OnClick="btnNext_Click">
            
</asp:Button>
            
<asp:Button ID="btnLast" Text="末页" runat="server" OnClick="btnLast_Click">
            
</asp:Button>
            
<asp:Label runat="server" ID="lblPagesIndex"></asp:Label>
            
<asp:Label runat="server" ID="Label2" Text="转到第:"></asp:Label>
            
<asp:TextBox ID="txt" runat="server"  Width="40px" ></asp:TextBox>
            
<asp:Label runat="server" ID="Label1" Text=""></asp:Label>
            
<asp:Button ID="btnSkip" Text="转到" runat="server" OnClick="btnSkip_Click"></asp:Button>
          
    
</form>
</body>
</html>

2.后台代码

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BaiChang.Node;


public partial class admin_Club_User_test : System.Web.UI.Page
{
    NodeContext nc 
= new NodeContext(Utils.BC_ConnectionString);
    
    
protected void Page_Load(object sender, EventArgs e)
    {
        
this.pageSize = 20;
        
if (!IsPostBack)
        {
            SetFirstPage();
        }
    }

    
protected override void OnPreRender(EventArgs e)
    {
        
base.OnPreRender(e);
        
if (CurrentPage == 1)
        {
            btnFirst.Enabled 
= false;
            btnPre.Enabled 
= false;
        }
        
else
        {
            btnFirst.Enabled 
= true;
            btnPre.Enabled 
= true;
        }
        
if (CurrentPage == PageCount)
        {
            btnNext.Enabled 
= false;
            btnLast.Enabled 
= false;
        }

        
else
        {
            btnNext.Enabled 
= true;
            btnLast.Enabled 
= true;
        }
        GetCurrent(CurrentPage, PageSize);
        lblRowsCount.Text 
= string.Format("共:{0} 位会员", RowsCount);
        lblPagesIndex.Text 
= string.Format("页次:{0}/{1}", CurrentPage, PageCount);
    }

    
protected void btnFirst_Click(object sender, EventArgs e)
    {
        SetFirstPage();
    }
    
    
protected void btnLast_Click(object sender, EventArgs e)
    {
        SetLastPage();
    }

    
protected void btnPre_Click(object sender,EventArgs e)
    {
        
if (ViewState["currentPage"== null)
        {
            
this.currentPage = 1;
        }
        
else
        {
            
this.currentPage = int.Parse(ViewState["currentPage"].ToString()) - 1;
            ViewState[
"currentPage"= currentPage;
        }
    }
    
    
protected void btnNext_Click(object sender, EventArgs e)
    {
        
if (ViewState["currentPage"!= null)
        {
            
this.currentPage = int.Parse(ViewState["currentPage"].ToString()) + 1;
            ViewState[
"currentPage"= currentPage;
        }
    }

    
protected void btnSkip_Click(object sender, EventArgs e)
    {
        
if (txt.Text.Trim() == string.Empty)
        {
            
return;
        }
        
else
        {
            
int skipPage = int.Parse(txt.Text.Trim());
            
if (skipPage > PageCount)
            {
                txt.Text 
= string.Empty;
                
return;
            }
            
else
            {
                
this.currentPage = skipPage;
                ViewState[
"currentPage"= currentPage;
            }
        }
    }

    
void SetFirstPage()
    {
        
this.currentPage = 1;
        ViewState[
"currentPage"= currentPage;
    }

    
void SetLastPage()
    {
        
this.currentPage = PageCount;
        ViewState[
"currentPage"= currentPage;
    }

    IEnumerable
<BC_Club> Select()
    {
        var clubs 
= nc.BC_Club.Where(m => m.FilterState != 99);
        
return clubs;
    }

    
void GetCurrent(int start,int rows)
    {
        grdView.Rows.Clear();
        grdView.DataSource 
= Select().Skip(pageSize * (start - 1)).Take(rows).ToList();
        grdView.DataBind();
    }

    
private int RowsCount
    {
        
get 
        { 
            
if( ViewState["RowsCount"]==null)
                
return Select().Count(); 
            
else
                
return int.Parse(ViewState["RowsCount"].ToString());

        }
    }
   
    
private int pageSize;
    
private int PageSize
    {
        
set { value = this.pageSize; }
        
get { return pageSize; }
    }
    
    
private int currentPage;
    
private int CurrentPage
    {
        
set { value = this.currentPage; }
        
get { return this.currentPage; }
    }

    
private int PageCount
    {
        
get { return (int)Math.Ceiling((double)RowsCount / PageSize); }
    }


    
}


注释:

转载于:https://www.cnblogs.com/extensivewang/archive/2009/09/28/1575934.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值