对于Web开发最多的是涉及数据库的操作,当界面上查询到较多的数据库时通过分页来简化界面,本次实现了对如下界面的优化。
真分页:从数据库中选择当前页的记录
假分页:从数据库中选择所有的记录再进行分页
牛腩系统我实现的是真分页:
1.先下载ASPNetPager控件的dll文件
下载地址: http://files.cnblogs.com/tandyshen/AspNetPager.rar
2.工具箱引用控件,从本地浏览dll文件位置选中文件引用
3.对于D层以及相关数据库语句
string sql = "select * from(selectROW_NUMBER() over(order by id desc) as row,T.* from news T) as TT where TT.rowbetween @startIndex and @endIndex"
/// <summary> /// 分页功能 /// </summary> /// <param name="startIndex">开始页</param> /// <param name="endIndex">结束页</param> /// <returns>返回Datatable</returns> public DataTable SelectToPage(int startIndex, int endIndex) { DataTable dt = new DataTable(); SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@startIndex",startIndex), new SqlParameter("@endIndex",endIndex) }; string sql = "select * from(select ROW_NUMBER() over(order by id desc) as row,T.* from news T) as TT where TT.row between @startIndex and @endIndex"; dt = sqlhelper.ExecuteQuery(sql, paras, CommandType.Text); return dt; }
4.对于B层代码
//实现分页 public DataTable SelectToPage(int startIndex, int endIndex) { return cdao.SelectToPage(startIndex,endIndex); }
5.Web界面添加控件以及事件
注意事项:对于控件没有引用时总是提示控件创建错误,我的是引用成功还在提示,解决方法是清理解决方案重新加载打开页面。
源码自动生成以及控件属性设置
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" Width="470px" PageSize="3" AlwaysShow="true" OnPageChanged="AspNetPager1_PageChanged" ShowCustomInfoSection="Right" > </webdiyer:AspNetPager>
对于AspNetPager控件的改变事件
//分页功能实现 protected void AspNetPager1_PageChanged(object sender, EventArgs e) { int startIndex = AspNetPager1.StartRecordIndex; int endIndex = AspNetPager1.EndRecordIndex; DataTable dt =new CategoryManager().SelectToPage(startIndex, endIndex); repComment.DataSource= dt; repComment.DataBind(); }
对于管理新闻窗体加载事件的修改
protected void Page_Load(object sender, EventArgs e) { //判断session里面是否存在管理员 if (Session["admin"]!=null && Session["admin"].ToString()=="niunan") { //已登录 if (!Page.IsPostBack) { //页面第一次加载,绑定类别列表 DataTable dt = new CategoryManager().selectAll(); AspNetPager1.RecordCount = dt.Rows.Count; int startIndex = AspNetPager1.StartRecordIndex; int endIndex = AspNetPager1.EndRecordIndex; DataTable dtpage = new NewsManager().SelectToPage(startIndex, endIndex); repComment.DataSource = dtpage; repComment.DataBind(); } } else { //未登录 Response.Redirect("Login.aspx"); } }