分页
在软件开发的过程中,那些最常见的东西我们常常会忽略。例如这个"分页"。“分页”也有“真假”之说。
假分页:从数据库中一次性选择所有数据,再将所有数据根据每页显示多少条记录进行分类。其缺点是在数据比较多时,加载时间会长,优点使可以减少和后台的交互次数。
真分页:只从数据库中选择当前页的数据,跳转下一页是再次读取。缺点是与后台交互次数比较多,优点使每次加载速度比较快。
接下来笔者就以真分页为例,实现下图新闻的分页
实现分页
<1>编写存储过程。分页针对的是查询到的数据,所以这里涉及到数据库的操作。按照如下代码,新建你的存储过程
<2> 在D层调用存储过程。笔者在D层NewsDAO文件中编写代码,目的是实现显示出的新闻内容分页
# region 显示新闻分页
/// <summary>
/// 新闻分页显示
/// </summary>
/// <param name="start">开始</param>
/// <param name="end">结束</param>
/// <returns></returns>
public DataTable SelectPage(int start, int end)
{
DataTable dt = new DataTable();
string cmdText = "procNewsSelectPage";
SqlParameter[] paras = new SqlParameter[] {
new SqlParameter("@start",start),
new SqlParameter("@end",end),
};
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
#endregion
<3>在Web层中添加分页控件AspNetPager,并完善此控件代码。笔者在newsmanager.aspx文件中添加的代码
<webdiyer:AspNetPager ID="anp" runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" OnPageChanged="anp_PageChanged" PageSize="5" AlwaysShow="true">
</webdiyer:AspNetPager>
<4>B层对应代码。笔者写在了B层NewsManager文件里
#region 新闻分页
//分页
public DataTable SelectNewsByPage(int start, int end)
{
return ndao.SelectPage(start, end);
}
#endregion
<5>在Web层新闻管理newsmanager.aspx.cs后台编写代码。由于后台文件中其他功能已写入代码,笔者只列出分页功能需要加的代码
protected void Page_Load(object sender, EventArgs e)
{
UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
//判断session里面是否存在管理员
if (Session["admin"] != null && Session["admin"].ToString() == "niunan")
{
//已登录
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt = new NewsManager().SelectAll();
anp.RecordCount = dt.Rows.Count;
BindNews();
}
}
else
{
//未登录
Response.Redirect("login.aspx");
}
}
//删除按钮
protected void lbtnDel_Click(object sender, EventArgs s)
{
string id = ((LinkButton)sender).CommandArgument;
bool b = new NewsManager().Delete(id);
if (b)
{
BindNews();
}
else
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('未知原因导致删除失败!');</script>");
}
}
#region 绑定新闻列表
private void BindNews()
{
int start = anp.StartRecordIndex;
int end = anp.EndRecordIndex;
repNews.DataSource = new NewsManager().SelectNewsByPage(start,end);
repNews.DataBind();
}
#endregion
protected void anp_PageChanged(object sender, EventArgs e)
{
BindNews();
}
<6>重新生成下文件,分页功能便出来了~