.NET中一个自定义用户分页控件

前端HTML代码:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PageNavigator.ascx.cs" Inherits="PageNavigator" %>

共<asp:Label runat="server" ID="LblRecordCount"/>条记录,共<asp:Label runat="server" ID="LblPageCount">0</asp:Label>页,当前第<asp:Label runat="server" ID="LblPageIndex" />页
<asp:LinkButton ID="LnkBtnFirst" runat="server" CommandName="Page" OnClick="LnkBtnFirst_Click" CssClass="list_link">首页</asp:LinkButton>

<asp:LinkButton ID="LnkBtnPrevious" runat="server" CommandName="Page" OnClick="LnkBtnPrevious_Click" CssClass="list_link">上一页</asp:LinkButton>

<%-- <asp:LinkButton ID="PageChange1" Visible="false" runat="server" CommandName="Page" OnClick="PageChange_Click" CssClass="list_link">[1]</asp:LinkButton>
<asp:LinkButton ID="PageChange2" runat="server" Visible="false" CommandName="Page" OnClick="PageChange_Click" CssClass="list_link">[2]</asp:LinkButton>
<asp:LinkButton ID="PageChange3" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[3]</asp:LinkButton>
<asp:LinkButton ID="PageChange4" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[4]</asp:LinkButton>
<asp:LinkButton ID="PageChange5" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[5]</asp:LinkButton>
<asp:LinkButton ID="PageChange6" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[6]</asp:LinkButton>
<asp:LinkButton ID="PageChange7" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[7]</asp:LinkButton>
<asp:LinkButton ID="PageChange8" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[8]</asp:LinkButton>
<asp:LinkButton ID="PageChange9" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[9]</asp:LinkButton>
<asp:LinkButton ID="PageChange10" runat="server" Visible="false" CommandName="Page" CssClass="list_link" OnClick="PageChange_Click">[10]</asp:LinkButton> --%>

<asp:LinkButton ID="LnkBtnNext" runat="server" CommandName="Page" OnClick="LnkBtnNext_Click" CssClass="btn">下一页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnLast" runat="server" CommandName="Page" OnClick="LnkBtnLast_Click" CssClass="list_link">尾页</asp:LinkButton>
<asp:textbox id="txtNewPageIndex" runat="server" width="20px" CssClass="form"/>
<asp:linkbutton id="LnkBtnGoto" runat="server" causesvalidation="False" commandargument="-1" commandname="Page" text="转到此页" OnClick="LnkBtnGoto_Click" CssClass="list_link" />

后台代码:

//======================================================
//==     (c)2008 aspxcms inc by NeTCMS v1.0              ==
//==          Forum:bbs.aspxcms.com                   ==
//==         Website:www.aspxcms.com                  ==
//======================================================
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;

public delegate void PageChangeHandler(object send, int nPageIndex);

public partial class PageNavigator : System.Web.UI.UserControl
{
    public event PageChangeHandler OnPageChange;
    private int _PageCount = 0;
    private int _RecordCount = 0;
    private int _PageIndex = 1;

    protected void Page_Load(object sender, EventArgs e)
    {
        //if (!IsPostBack)
        //{
        //    PageChange1.Attributes["pgno"] = "1";
        //    PageChange2.Attributes["pgno"] = "2";
        //    PageChange3.Attributes["pgno"] = "3";
        //    PageChange4.Attributes["pgno"] = "4";
        //    PageChange5.Attributes["pgno"] = "5";
        //    PageChange6.Attributes["pgno"] = "6";
        //    PageChange7.Attributes["pgno"] = "7";
        //    PageChange8.Attributes["pgno"] = "8";
        //    PageChange9.Attributes["pgno"] = "9";
        //    PageChange10.Attributes["pgno"] = "10";
        //    PageChange1.Attributes["lbno"] = "1";
        //    PageChange2.Attributes["lbno"] = "2";
        //    PageChange3.Attributes["lbno"] = "3";
        //    PageChange4.Attributes["lbno"] = "4";
        //    PageChange5.Attributes["lbno"] = "5";
        //    PageChange6.Attributes["lbno"] = "6";
        //    PageChange7.Attributes["lbno"] = "7";
        //    PageChange8.Attributes["lbno"] = "8";
        //    PageChange9.Attributes["lbno"] = "9";
        //    PageChange10.Attributes["lbno"] = "10";
        //    for (int i = 1; i <= 10; i++)
        //    {

        //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).Attributes["pgno"] = (1 + i - 1).ToString();
        //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).Text = "[" + (1 + i - 1).ToString() + "]";
        //        if ((1 + i - 1) <= Int32.Parse(LblPageCount.Text))
        //        {
        //            ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = true;
        //        }
        //        else
        //        {
        //            ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = false;
        //        }
        //    }
        //    if ((LinkButton)this.FindControl("PageChange" + LblPageIndex.Text.ToString()) != null)
        //    {
        //        ((LinkButton)this.FindControl("PageChange" + LblPageIndex.Text.ToString())).CssClass = "pageOn";
        //    }
        //}
    }

    public int PageCount
    {
        get
        {
            return int.Parse(this.LblPageCount.Text);
        }
        set
        {
            _PageCount = value;
            this.LblPageCount.Text = _PageCount.ToString();
            //for (int i = 1; i <= 10; i++)
            //{

            //    ((LinkButton)this.FindControl("PageChange" + i.ToString())).Attributes["pgno"] = (1 + i - 1).ToString();
            //    ((LinkButton)this.FindControl("PageChange" + i.ToString())).Text = "[" + (1 + i - 1).ToString() + "]";
            //    if ((1 + i - 1) <= Int32.Parse(LblPageCount.Text))
            //    {
            //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = true;
            //    }
            //    else
            //    {
            //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = false;
            //    }
            //}
        }
    }
    public int RecordCount
    {
        get
        {
            return int.Parse(this.LblRecordCount.Text);
        }
        set
        {
            _RecordCount = value;
            this.LblRecordCount.Text = _RecordCount.ToString();
        }
    }
    public int PageIndex
    {
        get
        {
            return int.Parse(this.LblPageIndex.Text);
        }
        set
        {
            _PageIndex = value;
            this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString();
            if (_PageIndex < 2)
            {
                this.LnkBtnFirst.Enabled = false;
                this.LnkBtnPrevious.Enabled = false;
            }
            else
            {
                this.LnkBtnFirst.Enabled = true;
                this.LnkBtnPrevious.Enabled = true;
            }
            if (_PageIndex >= _PageCount)
            {
                this.LnkBtnNext.Enabled = false;
                this.LnkBtnLast.Enabled = false;
            }
            else
            {
                this.LnkBtnNext.Enabled = true;
                this.LnkBtnLast.Enabled = true;
            }
        }
    }

    //protected void PageChange_Click(object sender, EventArgs e)
    //{
    //    int i_currentPgNo = Int32.Parse(((LinkButton)sender).Attributes["pgno"].ToString());
    //    int i_currentLbNo = Int32.Parse(((LinkButton)sender).Attributes["lbno"].ToString());
    //    int i_NewPgStartNo = 1;
    //    if (i_currentPgNo - 5 > 0)
    //    {
    //        i_NewPgStartNo = i_currentPgNo - 5+1;
    //    }
    //    for (int i = 1; i <= 10; i++)
    //    {
    //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).Attributes["pgno"] = (i_NewPgStartNo + i - 1).ToString();
    //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).Text = "["+(i_NewPgStartNo + i - 1).ToString() + "]";
    //        if ((i_NewPgStartNo + i - 1) <= Int32.Parse(LblPageCount.Text))
    //        {
    //            ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = true;
    //        }else
    //        {
    //            ((LinkButton)this.FindControl("PageChange" + i.ToString())).Visible = false;
    //        }
    //        if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
    //        {
    //            ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
    //        }
    //    }
    //    OnPageChange(sender, i_currentPgNo);
    //    ((LinkButton)this.FindControl("PageChange" + i_currentPgNo.ToString())).CssClass = "pageOn";
    //}

    protected void LnkBtnFirst_Click(object sender, EventArgs e)
    {
        try
        {
            OnPageChange(sender, 1);
            //for (int i = 1; i <= 10; i++)
            //{
            //    if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
            //    {
            //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
            //    }
            //}
            //((LinkButton)this.FindControl("PageChange1")).CssClass = "pageOn";
        }
        catch { }
    }
    protected void LnkBtnPrevious_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageIndex.Text);
            n--;
            OnPageChange(sender, n);
            //for (int i = 1; i <= 10; i++)
            //{
            //    if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
            //    {
            //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
            //    }
            //}
            //((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
        }
        catch
        {
            throw;
        }
    }
    protected void LnkBtnNext_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageIndex.Text);
            n++;
            OnPageChange(sender, n);
            //for (int i = 1; i <= 10; i++)
            //{
            //    if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
            //    {
            //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
            //    }
            //}
            //((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
        }
        catch
        {
            throw;
        }
    }
    protected void LnkBtnLast_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageCount.Text);
            //for (int i = 1; i <= 10; i++)
            //{
            //    if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
            //    {
            //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
            //    }
            //}
            //((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
            OnPageChange(sender, n);
        }
        catch
        {
            throw;
        }
    }
    protected void LnkBtnGoto_Click(object sender, EventArgs e)
    {
        int n;
        try
        {
            n = Convert.ToInt32(this.txtNewPageIndex.Text);
        }
        catch
        {
            n = Convert.ToInt32(this.LblPageIndex.Text);
        }
        int np = Convert.ToInt32(this.LblPageCount.Text.Trim());
        if (n > np)
            n = np;
        if (n < 1)
            n = 1;
        OnPageChange(sender, n);
        //for (int i = 1; i <= 10; i++)
        //{
        //    if (((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass == "pageOn")
        //    {
        //        ((LinkButton)this.FindControl("PageChange" + i.ToString())).CssClass = "list_link";
        //    }
        //}
        //((LinkButton)this.FindControl("PageChange" + n.ToString())).CssClass = "pageOn";
    }
}

 

调用页面部分代码:

 protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            //int pageIndex = 0;
            //int pageSize = 5;
            //int rowCount;
            //rpNewsList.DataSource = NewMethod(pageIndex, pageSize, out rowCount);
            //rpNewsList.DataBind();
            //this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_OnPageChange);

            ListDataBind(1);

        }
        this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_OnPageChange);
    }

    void PageNavigator1_OnPageChange(object send, int PageIndex)
    {
        ListDataBind(PageIndex);
    }

    private void ListDataBind(int PageIndex)
    {
        int rowCount;
        int pageSize = 5;
        NewMethod(PageIndex, pageSize, out rowCount);
        this.PageNavigator1.PageCount = rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize + 1;
        this.PageNavigator1.RecordCount = rowCount;
        this.PageNavigator1.PageIndex = PageIndex;
        this.rpProductList.DataSource = NewMethod(PageIndex, pageSize, out rowCount);
        this.rpProductList.DataBind();
    }

    private DataTable NewMethod(int pageIndex, int pageSize, out int rowCount)
    {
        SqlConnection con = new SqlConnection("server=192.168.0.100;uid=sa;pwd=20080512;database=webshop;");

        con.Open();
        string selectcount = "select count(*) from product";

        SqlCommand cmd = new SqlCommand(selectcount, con);
        rowCount = Convert.ToInt32(cmd.ExecuteScalar());

        string sql = @"select * from 
                (select *,row_number() over (order by Id)as IDRank  from product where 1=1
                ) table1 where  IDRank> ('" + pageSize * (pageIndex - 1) + "')  and  IDRank<=('"
                + pageSize * pageIndex + "') order by IDRank desc";
        DataSet ds = new DataSet();

        SqlDataAdapter sda = new SqlDataAdapter(sql, con);

        sda.Fill(ds);

        con.Close();
        return ds.Tables[0];
    }

 

分页存储过程:

CREATE  procedure [dbo].[proc_paged_with_Rownumber] 
(
    @pageIndex int,
    @pageSize int ,
    @ClassID varchar(50)
)
as
  
begin

   
    select * from (select *,Row_number() over(order by Id asc) as IDRank from NT_News where 1=1 and ClassID=@ClassID   ) as table1 where  IDRank> (@pageSize*(@pageIndex-1))  and  IDRank<=(@pageSize*@pageIndex)
   

end


点击下载

posted on 2011-12-16 22:29  詠吥誩棄  阅读(6763)  评论(0)    收藏  举报