对于牛腩视频中的最后一集,在实现分页的时候,视频里关于假分页也没有实现,所以在看了别人的博客,以及找了找资料,终于搞定了,下面分享一下我的制作过程。
总的来说,这里面最主要的部分就是存储过程的编写,以及在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>
这个分页功能在视频中并没有实现,也有很多人就止步于此了,但是我们要的是敢于去做,即使没有实现,。记得小时候我们都学过《为学》这篇课文,现在想想古人的智慧太厉害了,天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。所以,只要去做,你就会发现,没有什么难的了你。