对于牛腩视频中的最后一集,在实现分页的时候,视频里关于假分页也没有实现,所以在看了别人的博客,以及找了找资料,终于搞定了,下面分享一下我的制作过程。
总的来说,这里面最主要的部分就是存储过程的编写,以及在AspNetPager怎样传输数据。
1.首先是页面,总得要有地方显示。那么问题来了,按照视频上所讲,只用AspNetPager来实现,只显示页数,没有数据时不可能的,所以我们需要将其和gridview控件合起来使用。
点击gridview空间右上角出现的 编辑列 按钮,进行数据绑定。点击BoundField进行添加,可以得到下图:
最后点击确定,得到页面结果,在这里如果出现了多余的自己不想要的列数,我们可以通过设置AutoGenerateColumns的属性进行修改:
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>
这个分页功能在视频中并没有实现,也有很多人就止步于此了,但是我们要的是敢于去做,即使没有实现,。记得小时候我们都学过《为学》这篇课文,现在想想古人的智慧太厉害了,天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。
所以,只要去做,你就会发现,没有什么难的了你。
时间: 2024-10-05 09:38:29