AspNetPager分页记录显示实例

本文详细介绍了ASP.NET中使用AspNetPager控件实现分页功能的过程,包括原理解释、代码实现及关键注意事项。通过存储过程优化查询效率,并与GridView控件结合,实现高效、灵活的分页展示。

           在牛腩视频中的最后一集,涉及到了一个外部控件AspNetPager实现分页记录显示的一个小例子没有完成,据了解分页显示功能在软件设计中是很重要的一个功能,因此,在这里讲未完成的工作完成。

      在视频中讲到,gridview的分页功能属于假分页,为什么呢?因为每次分页必须查询完数据库中所有的记录,这样如果数据量过大,将会造成很大不便。所以选择了AspNetPager这个控件。

     其实,这个控件只是提供了一个分页功能,它并不能显示数据,因此,它还是需要与gridview结合起来使用才可以完全实现我们分页的这个功能。

    当然gridview这个控件的使用,视频中有用到,但是由于多次复制粘贴的缘故,到后来很难回忆出当时到底是如何使用的了。其实这个控件主要有这么几个关键注意的点,如下:

     1、在编辑列时,由于过长代码,可选择在设计视图中进行编辑

     2、若想与css结合设计表格的样式,可将列转换为自定义模板列如下图所示:

     3、autogenericcolumns这个属性的应用

好了,了解了控件使用后,我们就来利用它们实现分页制作吧!

首先,通过存储过程来编写数据库查询语句,如下:

ALTER PROCEDURE [dbo].[partPage]
	@startIndex int, --查询开始记录数
	@endIndex int    --结束记录数
AS
BEGIN

	with temptbl as (
	SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行号, * from news  --使得记录按顺序排列,按行号查询
)
SELECT * FROM temptbl where 行号 between @startIndex and @endIndex

END

编写完存储过程后,便是D层要写的代码,如下:

  public DataTable SelectByPage(int startIndex,int endIndex)
        {
            DataTable dt = new DataTable();
            string cmdText = "partPage";
            SqlParameter[] paras = new SqlParameter[]{
                new SqlParameter ("@startIndex",startIndex ),
                new SqlParameter ("@endIndex",endIndex )
            };
            dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
            return dt;
        }

sqlhelper中的代码不便,如下:

 /// <summary>
        /// 执行带参数的查询语句
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <param name="paras">参数</param>
        /// <returns>datatable</returns>
        public DataTable ExecuteQuery(string cmdText,SqlParameter []paras,CommandType ct)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmdText , GetConn());
            cmd.Parameters.AddRange(paras);
            cmd.CommandType = ct;
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
               
                dt.Load(sdr);
            }

            return dt;
        }

好了,后台大部分工作已准备齐全,就只剩U层代码了:

声明:在这里是按照视频中那样在设计中指定了每页显示5条新闻,如果在代码中写也是可以的,可以写入asp.pagesize=5;

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack )
            {
                DataTable dt = new DataTable();
                dt = new NewsManager().SelectAll();//选择所有新闻
                anp.RecordCount = dt.Rows.Count; //记录总数 
                //开始绑定记录
                int startIndex=anp.StartRecordIndex ; //开始记录数
                int endIndex=anp.EndRecordIndex ; //结束记录数
                dt = new NewsManager().SelectByPage(startIndex, endIndex);
                gvNews.DataSource = dt;
                gvNews.DataBind();
            }
        }

        protected void anp_PageChanged(object sender, EventArgs e)
        {
            Response.Write("开始记录数为:" + anp.StartRecordIndex + "结束记录数为:" +anp.EndRecordIndex );
        }

好了,至此,基本上的框架就已经实现了,那么我们来看一下效果吧!


看着还不错吧???

这个分页控件,修改连接字符串,和SQL语句,就可以了。 剩下的直接粘贴进去。就行。 强大的各种属性,附带多种CSS,想怎么分就怎么分页! 拖入工具箱后实现 1.2.3步(你修改下连接符,表就可以了) 控件.aspx页面 复制粘贴到前台页面适当位置即可 <webdiyer:AspNetPager ID="Pager1" runat="server" pagesize="9" CssClass="anpager" onpagechanged="AspNetPager1_PageChanged" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" ShowPageIndexBox="Never"></webdiyer:AspNetPager> 控件.cs页面,后台页面 只需3步 设置连接字符串 string connstring = "Data Source=.;Initial Catalog=数据库名;User ID=用户名;Password=密码"; 程序页面内容:复制粘贴修改几个 //首页加载-1 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SqlConnection conn = null; try { conn = new SqlConnection(connstring); conn.Open(); SqlCommand Count = new SqlCommand(); Count.Connection = conn; //修改你们查询的表 Count.CommandText = "select count(*) from products"; //查询 Pager1.RecordCount = (int)Count.ExecuteScalar(); //Pager1为分页控件ID BindData(); } finally { conn.Close(); } } } //绑定数据-2 public void BindData() { SqlConnection conn = new SqlConnection(connstring); string sql = "select * from products";//修改你们的查询语句: //select top查询语句 SqlDataAdapter da = new SqlDataAdapter(sql, conn); DataSet ds = new DataSet(); da.Fill(ds, Pager1.PageSize * (Pager1.CurrentPageIndex - 1), Pager1.PageSize, "temptbl"); DataTable dt = ds.Tables["temptbl"]; DataList1.DataSource = dt; DataList1.DataBind(); } //控件事件-每次重新绑定 protected void AspNetPager1_PageChanged(object src, EventArgs e) { BindData(); }
AspNetPager7.2分页控件及Demo源码 分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至自定义数据绑定控件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多ASP.NET程序员最头疼的问题之一。 AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。 AspNetPager 7.2 版发布 新增属性 PagingButtonLayoutType,可设置分页导航元素(数字页索引、上页、下页、首页和尾页)的布局方式,该属性值是一个PagingButtonLayoutType枚举,通过设置该属性为PagingButtonLayoutType.UnorderedList或PagingButtonLayoutType.Span,允许将这些分页导航元素包含在 与或与标签之间,以便于为这些分页元素应用CSS样式。 新增 PagingButtonClass 与 PagingButtonStyle 属性,可以单独为分页导航按钮(数字页索引、上页、下页、首页和尾页)设置CSS样式; 新增 FirstLastButtonClass 与 FirstLastButtonStyle 属性,可以单独为首页和尾页分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则首页和尾页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增 NextPrevButtonClass 与 NextPrevButtonStyle 属性,可以单独为上页和下页分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则上页和下页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增 MoreButtonClass 与 MoreButtonStyle 属性,可以单独为更多页(...)分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则上页和下页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增属性 ShowMoreButtons ,可以指定是否显示更多页按钮; 新增属性 CurrentPageButtonPosition ,可设置在每次分页后,当前页数字索引在所有的数字页索引中的显示位置,该属性值是一个PagingButtonPosition枚举,对应的值及说明如下: Beginning:当前页数字索引显示在所有数字页索引的最前面; End:当前页数字索引显示在所有数字页索引的最后面; Center:当前页数字索引显示在所有数字页索引的中间; Fixed:默认值,固定不变; 控件的CssClass属性仅应用于控件的窗口元素(div),将不再应用于下属分页元素; 废止属性CenterCurrentPageButton,可以用CurrentPageButtonPosition属性取代; 修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能; 修正了7.1版中设置SubmitButtonImageUrl属性后,Postback回发分页方式情况下点击数字页索引按钮不引发分页事件的bug; 修正了使用Url分页时,如果页面上没有服务器端form控件时无法注册客户端脚本的bug,从7.2版起如果使用Url分页并且ShowPageIndexBox属性没有设置为Never时, AspNetPager控件必须放在 与 标记之间,若使用Url分页并且ShowPageIndexBox为Never时,页面上可以不使用服务器端form控件。 AspNetPager的主要功能: 1、支持通过Url进行分页AspNetPager除提供默认的类似于DataGrid和GridView的PostBack分页方式外,还支持通过Url进行分页,象大多数asp程序中分页一样, Url分页方式允许用户通过在浏览器地址栏中输入相应的地址即可直接进入指定页面,也可以使搜索引擎搜索到所有分页的页面的内容,因此具有用户友好和搜索引擎友好的优点,关于Url分页与PostBack分页方式的差异,请参考Url与PostBack分页方式的对比。 2、支持Url分页方式下的Url重写(UrlRewrite)功能 Url重写技术可以使显示给用户的Url不同于实际的Url,Url重写技术被广泛应用于搜索引擎优化(SEO)、网站重组后重定向页面路径以及提供用户友好的Url等方面, AspNetPager支持Url重写技术使您可以自定义分页导航的Url格式,实现Url重写; 3、支持使用用户自定义图片做为导航元素: 您可以使用自定义的图片文件做为分页控件的导航元素,而不仅仅限于显示文字内容。 4、功能强大灵活、使用方便、可定制性强: AspNetPager分页控件的所有导航元素都可以由用户进行单独控制,从6.0版起,AspNetPager支持使用主题(Theme)与皮肤(Skin)统一控件的整体样式,配合asp.net 2.0中的DataSource控件,AspNetPager只需要编写短短几行代码,甚至无需编写任何代码,只需设置几个属性就可以实现分页功能。 5、增强的 Visual Studio 2005/2008设计时支持 增强的设计时支持使控件在设计时更加直观,易于使用,开发快捷方便。 6、兼容IE6.0+及FireFox 1.5+等浏览器 7、丰富而完整的控件文档和示例项目: 控件附带的完整的帮助文档及示例项目能够帮助您快速上手,熟悉AspNetPager控件的使用,您还可以通过给作者留言以及论坛提问等方式解决控件使用中遇到的问题。 AspNetPager72Src下为AspNetPager组件源码 作者:webdiyer
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值