ASP.NET List泛型分页代码

我们以前做ASP.NET网站,通常是把DataSet绑定到显示控件上,再用各种手段进行分页,比如PagedDataSource。然而,如果你是从业务层取数据,通常是一个List,这个时候就不能用以往的方法分页了。

pageControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="pageControl.ascx.cs" Inherits="control_pageControl" %>
<asp:Label ID="lb_pageIndex" runat="server"></asp:Label>
/<asp:Label ID="lb_pages" runat="server"></asp:Label>
页 每页<asp:Label ID="lb_pageSize" runat="server"></asp:Label>&nbsp;&nbsp; 总数<asp:Label ID="lb_rCount" runat="server"></asp:Label>&nbsp;&nbsp;&nbsp;
<asp:LinkButton ID="btn_frist" runat="server" OnClick="btn_frist_Click">首  页</asp:LinkButton>        
<asp:LinkButton ID="btn_prevenient" runat="server" OnClick="btn_prevenient_Click">上一页</asp:LinkButton>
<asp:LinkButton ID="btn_next" runat="server" OnClick="btn_next_Click">下一页</asp:LinkButton>&nbsp;
<asp:LinkButton ID="btn_last" runat="server" OnClick="btn_last_Click">尾  页</asp:LinkButton>
页跳转:<asp:DropDownList ID="pagelist" runat="server" AutoPostBack="True" OnTextChanged="pagelist_TextChanged"></asp:DropDownList>
 

pageControl.ascx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

public partial class control_pageControl : System.Web.UI.UserControl
{
    public delegate void setPageHandler(object sender, pageEventArgs e);
    public event setPageHandler setPage;

    public class pageEventArgs : EventArgs
    {
        private int page;

        public int Page
        {
            get { return page; }
        }

        public pageEventArgs(int page)
        {
            this.page = page;
        }
    }

    protected virtual void OnsetPage(pageEventArgs e)
    {
        if (setPage != null)
        {
            setPage(this, e);
        }
    }

    //分页数据源
    public PagedDataSource DataSource = new PagedDataSource();

    //属性:每页记录数
    public int PageSize
    {
        get
        {
            if (ViewState["PageSize"] != null)
            {
                return int.Parse(ViewState["PageSize"].ToString());
            }
            else
            {
                return 0;
            }
        }
        set { ViewState["PageSize"] = value; }
    }
    //属性:总记录数
    public int totalRow
    {
        get
        {
            if (ViewState["totalRow"] != null)
            {
                return int.Parse(ViewState["totalRow"].ToString());
            }
            else
            {
                return 0;
            }
        }
        //set { ViewState["totalRow"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (ViewState["pagecount"] == null)
            {
                Response.Write("<script>alert('错误:您没有在页面首次读入时绑定分页控件');</script>");
                return;
            }
            pagelist.Items.Clear();
            for (int i = 1; i <= (int)ViewState["pagecount"]; i++)
            {
                pagelist.Items.Add(i.ToString());
            }
        }
    }

    public void DataBind(DataTable dt,int curpage)
    {
        DataSource.DataSource = dt.DefaultView;
        DataSource.AllowPaging = true;
        DataSource.PageSize = PageSize;
        ViewState["totalRow"] = dt.Rows.Count;
        ViewState["currentpage"] = curpage;
        if (curpage > DataSource.PageCount - 1) DataSource.CurrentPageIndex = curpage - 1;
        else DataSource.CurrentPageIndex = curpage;
        ViewState["pagecount"] = DataSource.PageCount;
        if ((int)ViewState["currentpage"] < 0)
        {
            ViewState["currentpage"] = 0;
        }
        if ((int)ViewState["currentpage"] > (int)ViewState["pagecount"] - 1)
        {
            ViewState["currentpage"] = (int)ViewState["pagecount"] - 1;
        }
        lb_pageIndex.Text = Convert.ToString(curpage + 1);
        lb_pages.Text = ViewState["pagecount"].ToString();
        lb_rCount.Text = this.totalRow.ToString();
        lb_pageSize.Text = this.PageSize.ToString();
        btn_frist.Enabled = true;
        btn_prevenient.Enabled = true;
        btn_next.Enabled = true;
        btn_last.Enabled = true;
        if (DataSource.IsFirstPage)
        {
            btn_frist.Enabled = false;
            btn_prevenient.Enabled = false;
        }
        if (DataSource.IsLastPage)
        {
            btn_next.Enabled = false;
            btn_last.Enabled = false;
        }
        pagelist.Text = Convert.ToString((int)ViewState["currentpage"] + 1);
    }

    public void DataBind(IList list, int curpage)
    {

        DataSource.DataSource = list;
        DataSource.AllowPaging = true;
        DataSource.PageSize = PageSize;
        ViewState["totalRow"] = list.Count;
        ViewState["currentpage"] = curpage;
        if (curpage > DataSource.PageCount - 1) DataSource.CurrentPageIndex = curpage - 1;
        else DataSource.CurrentPageIndex = curpage;
        ViewState["pagecount"] = DataSource.PageCount;
        if ((int)ViewState["currentpage"] < 0)
        {
            ViewState["currentpage"] = 0;
        }
        if ((int)ViewState["currentpage"] > (int)ViewState["pagecount"] - 1)
        {
            ViewState["currentpage"] = (int)ViewState["pagecount"] - 1;
        }
        lb_pageIndex.Text = Convert.ToString(curpage + 1);
        lb_pages.Text = ViewState["pagecount"].ToString();
        lb_rCount.Text = this.totalRow.ToString();
        lb_pageSize.Text = this.PageSize.ToString();
        btn_frist.Enabled = true;
        btn_prevenient.Enabled = true;
        btn_next.Enabled = true;
        btn_last.Enabled = true;
        if (DataSource.IsFirstPage)
        {
            btn_frist.Enabled = false;
            btn_prevenient.Enabled = false;
        }
        if (DataSource.IsLastPage)
        {
            btn_next.Enabled = false;
            btn_last.Enabled = false;
        }
        pagelist.Text = Convert.ToString((int)ViewState["currentpage"] + 1);
    }

    protected void btn_frist_Click(object sender, EventArgs e)
    {
        ViewState["currentpage"] = 0;
        pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
        OnsetPage(pe);
    }
    protected void btn_last_Click(object sender, EventArgs e)
    {
        ViewState["currentpage"] = (int)ViewState["pagecount"] - 1;
        pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
        OnsetPage(pe);
    }
    protected void btn_prevenient_Click(object sender, EventArgs e)
    {
        if ((int)ViewState["currentpage"] > 0)
        {
            ViewState["currentpage"] = (int)ViewState["currentpage"] - 1;
        }
        pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
        OnsetPage(pe);
    }
    protected void btn_next_Click(object sender, EventArgs e)
    {
        if ((int)ViewState["currentpage"] < ((int)ViewState["pagecount"] - 1))
        {
            ViewState["currentpage"] = (int)ViewState["currentpage"] + 1;
        }
        pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"]);
        OnsetPage(pe);
    }
    protected void pagelist_TextChanged(object sender, EventArgs e)
    {
        ViewState["currentpage"] = int.Parse(pagelist.Text);
        pageEventArgs pe = new pageEventArgs((int)ViewState["currentpage"] - 1);
        OnsetPage(pe);
    }
}

页面调用:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.PageControl1.setPage += new control_pageControl.setPageHandler(PageControl1_setPage);
        if (!Page.IsPostBack)
        {
            ViewState["page"] = 0;
            binddata();
        }
    }

    void PageControl1_setPage(object sender, control_pageControl.pageEventArgs e)
    {
        ViewState["page"] = e.Page;
        binddata();
    }

    private void binddata()
    {
        List<M_baseinfo> list = baseinfoBll.getList();
        PageControl1.DataBind(list, (int)ViewState["page"]);
        GridView1.DataSource = PageControl1.DataSource;
        GridView1.DataBind();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值