怎样通过AspNetPager实现分页功能

时间:2022-09-20 20:28:27

    对于牛腩视频中的最后一集,在实现分页的时候,视频里关于假分页也没有实现,所以在看了别人的博客,以及找了找资料,终于搞定了,下面分享一下我的制作过程。 

    总的来说,这里面最主要的部分就是存储过程的编写,以及在AspNetPager怎样传输数据。

1.首先是页面,总得要有地方显示。那么问题来了,按照视频上所讲,只用AspNetPager来实现,只显示页数,没有数据时不可能的,所以我们需要将其和gridview控件合起来使用。

   点击gridview空间右上角出现的 编辑列 按钮,进行数据绑定。点击BoundField进行添加,可以得到下图:

怎样通过AspNetPager实现分页功能

    最后点击确定,得到页面结果,在这里如果出现了多余的自己不想要的列数,我们可以通过设置AutoGenerateColumns的属性进行修改

怎样通过AspNetPager实现分页功能

2.页面搞定了,那么数据我们怎样获得,首先我们从后往前来,在这里,我们先编写存储过程。

<span style="font-family:KaiTi_GB2312;font-size:24px;">-- =============================================
-- Author:		王金博
-- Create date: 2014年10月28日09:54:11
-- Description:	分页制作
-- =============================================
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</span>

3.接下来就是D层,但是SqlHelper的编写已包含所有情况,所以不用改变。

<span style="font-family:KaiTi_GB2312;font-size:24px;">  /// <summary>
        /// 按页进行显示
        /// </summary>
        /// <param name="startIndex">开始记录数</param>
        /// <param name="endIndex">结束记录数</param>
        /// <returns></returns>
        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;
        }</span>

4.最后是U层代码,这里由于B层和Model层,大家都能理解,就不再详解。

<span style="font-family:KaiTi_GB2312;font-size:24px;">public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //重新绑定数据
            ReBind();
            
        }
    }
    protected void anp_PageChanged(object sender, EventArgs e)
    {
        //重新绑定数据
        ReBind();
    }

    private void ReBind()
    {
        Response.Write("开始记录数:" + anp.StartRecordIndex + "<br>结束记录数:" + anp.EndRecordIndex);
        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();

    }
}</span>
    这个分页功能在视频中并没有实现,也有很多人就止步于此了,但是我们要的是敢于去做,即使没有实现,。记得小时候我们都学过《为学》这篇课文,现在想想古人的智慧太厉害了,天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。
    所以,只要去做,你就会发现,没有什么难的了你。

 

相关文章