AspNetPager分页控件应用试例

来源:互联网 发布:h5 游戏 源码 编辑:程序博客网 时间:2024/05/21 12:53

 

备注

不同于DataGrid控件,AspNetPager分页控件本身并不显示任何数据,而只显示页导航元素,数据在页面上的显示方式与该控件无关。该控件可以为DataGrid、DataList、Repeater以及自定义控件进行分页,配合Sql存储过程,分页性能较使用DataGrid分页有明显提升,尤其是当数据量大时性能可提升数倍!

AspNetPager 2.0 中新增了通过Url来分页的功能,这使得访问者可以直接输入相应的Url来访问任何页面,并且搜索引擎也可以直接检索每个页面,若使用DataGrid的分页功能,这是无法实现的。

要使用 AspNetPager 分页控件,必须最少指定它的 RecordCount属性,指定并编写 PageChanged事件的处理程序。 RecordCount属性指定要分页的所有数据的总项数,若未指定该值或该值小于等于 PageSize,则AspNetPager控件不会显示任何内容。 若未指定并编写 PageChanged事件处理程序,则当用户点击页导航元素或在页索引文本框中手式输入页索引并提交时AspNetPager不会跳转到指定的页。 AspNetPager控件的分页方法和DataGrid基本相同,即在它的 PageChanged事件处理程序中将传递事件数据的 PageChangedEventArgsNewPageIndex值赋给 AspNetPager的 CurrentPageIndex属性,然后重新将新的数据与数据显示控件绑定。

示例

以下示例说明如何用AspNetPager对DataGrid进行分页。

            <%@ Page Language="C#"%>            <%@ Import Namespace="System.Data"%>            <%@Import Namespace="System.Data.SqlClient"%>            <%@Import Namespace="System.Configuration"%>            <%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>            <HTML>            <HEAD>            <TITLE>Welcome to Webdiyer.com </TITLE>              <script runat="server">            SqlConnection conn;            SqlCommand cmd;            void Page_Load(object src,EventArgs e)            {            conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);            if(!Page.IsPostBack)            {            cmd=new SqlCommand("GetNews",conn);            cmd.CommandType=CommandType.StoredProcedure;            cmd.Parameters.Add("@pageindex",1);            cmd.Parameters.Add("@pagesize",1);            cmd.Parameters.Add("@docount",true);            conn.Open();            pager.RecordCount=(int)cmd.ExecuteScalar();            conn.Close();            BindData();            }            }                        void BindData()            {            cmd=new SqlCommand("GetNews",conn);            cmd.CommandType=CommandType.StoredProcedure;            cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);            cmd.Parameters.Add("@pagesize",pager.PageSize);            cmd.Parameters.Add("@docount",false);            conn.Open();            dataGrid1.DataSource=cmd.ExecuteReader();            dataGrid1.DataBind();            conn.Close();            pager.CustomInfoText="记录总数:<font color=/"blue/"><b>"+pager.RecordCount.ToString()+"</b></font>";            pager.CustomInfoText+=" 总页数:<font color=/"blue/"><b>"+pager.PageCount.ToString()+"</b></font>";            pager.CustomInfoText+=" 当前页:<font color=/"red/"><b>"+pager.CurrentPageIndex.ToString()+"</b></font>";            }            void ChangePage(object src,PageChangedEventArgs e)            {            pager.CurrentPageIndex=e.NewPageIndex;            BindData();            }              </script>                 <meta http-equiv="Content-Language" content="zh-cn">            <meta http-equiv="content-type" content="text/html;charset=gb2312">            <META NAME="Generator" CONTENT="EditPlus">            <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">            </HEAD>            <body>            <form runat="server" ID="Form1">            <asp:DataGrid id="dataGrid1" runat="server" />                        <Webdiyer:AspNetPager id="pager"             runat="server"             PageSize="8"             NumericButtonCount="8"             ShowCustomInfoSection="left"             PagingButtonSpacing="0"            ShowInputBox="always"             CssClass="mypager"             HorizontalAlign="right"             OnPageChanged="ChangePage"              SubmitButtonText="转到"             NumericButtonTextFormatString="[{0}]"/>                        </form>            </body>            </HTML>             

下面是该示例所用的Sql Server存储过程:

            CREATE procedure GetNews             (@pagesize int,            @pageindex int,            @docount bit)            as            set nocount on            if(@docount=1)            select count(id) from news            else            begin            declare @indextable table(id int identity(1,1),nid int)            declare @PageLowerBound int            declare @PageUpperBound int            set @PageLowerBound=(@pageindex-1)*@pagesize            set @PageUpperBound=@PageLowerBound+@pagesize            set rowcount @PageUpperBound            insert into @indextable(nid) select id from news order by addtime desc            select O.id,O.source,O.title,O.addtime from news O,@indextable t where O.id=t.nid            and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id            end            set nocount off            GO             

 

要求

命名空间:Wuqi.Webdiyer 命名空间

程序集: AspNetPager.dll