Asp.Net自定义分页控件(前台/后台)有图
2009-03-31 11:38
756 查看
Asp.Net自定义分页控件(前台/后台)有图
2008年10月15日 星期三 05:42 P.M.
2008年10月15日 星期三 05:42 P.M.
用了一天的时间整理了上一家公司后台用的分页类和分页控件,然后结合网上的一些事例,因此有了前台分页控件,很实用的控件,在这里跟大家分享下。 前序:分页控件.ascx和页面之间沟通的方式有很多(读者可以去网上找找),这里的分页后台控件跟页面间的沟通方式是用了ViewState来记录当前的CurrentPage,通过分页类获取PageCount,ItemCount返回给分页控件。(当数据上百万(我测试的时候是250万)的时候,这个分页控件有点慢2-5秒,主要是由于绑定后面的DropDownList,读者可以自己改成输入数字的方式,我正在修改)。 前台分页控件就非常好用,做的时候参考了张子阳的分页控件,测试的时候翻页页面几乎不动。^_^,其实这些跟控件没有关系,就跟分页的SQL有关系,控件只是展示用的。btw,我用的是SQL语句,没有用存储过程。 <1>先来看后台控件: 1.1.截图: 1.2.控件用法: //四个LinkButton的代码: protected void lbFirstPage_Click(object sender, EventArgs e) { CurrentPage = 1; } protected void lbPreviousPage_Click(object sender, EventArgs e) { if (CurrentPage > 1) { CurrentPage = CurrentPage - 1; } } protected void lbNextPage_Click(object sender, EventArgs e) { if (CurrentPage < PageCount) { CurrentPage = CurrentPage + 1; } } protected void lbLastPage_Click(object sender, EventArgs e) { CurrentPage = PageCount; } //1.3控件属性 private bool mbChanged = false; #region property public int PageCount { get { if (ViewState["PageCount"] == null) return 1; else return (int)ViewState["PageCount"]; } set { ddlPage.Items.Clear(); if (value < 1) value = 1; for (int i = 1; i <= value; i++) { ddlPage.Items.Add(new ListItem("第" + i + "/" + value + "页", i.ToString())); } ViewState["PageCount"] = value; } } public int ItemCount { set { lblPageInfo.Text = "(" + value + "条)"; } } public int CurrentPage { get { if (ViewState["CurrentPage"] == null) CurrentPage = 1; return (int)ViewState["CurrentPage"]; } set { ViewState["CurrentPage"] = value; mbChanged = true; } } public bool Changed { get { return mbChanged; } } #endregion //1.4页面调用 private const int miPageSize = 10; private bool mbRebind = false; protected void Page_PreRender(object sender, EventArgs e) { if (myPaging.Changed) mbRebind = true; if (!IsPostBack || mbRebind) BindData(); } private void BindData() { string sKeyword = string.Empty; string sOrderBy = string.Empty; int iPageSize = miPageSize; int? iTopCount = null; //当iTopCount<iPageSize,取后者.为null时获取所有数据. int iCurrentPage = myPaging.CurrentPage; int iItemCount; int iPageCount; MyPage.BLL.User user = new MyPage.BLL.User(); IList<UserInfo> userList = user.GetUserList("", sKeyword, sOrderBy, iPageSize, ref iTopCount, ref iCurrentPage, out iItemCount, out iPageCount); rptMain.DataSource = userList; rptMain.DataBind(); myPaging.CurrentPage = iCurrentPage; myPaging.ItemCount = iItemCount; myPaging.PageCount = iPageCount; } <2>前台控件 2.1还是先看效果图 2.2代码贴上来可能太多,放不下。该控件没有使用ViewState 2.3大致思路:控件可以设置当前页面的前后几页,比如当前1996页,计算出1996的前三页,后四页,然后做一个for循环: list.InnerHtml += "共<font color=blue>" + itemCount + "</font>条 "; list.InnerHtml += string.Format("第{0}页/共{1}页", currentPage, pageCount); list.InnerHtml += "<a href=" + pageUrl + "Page=1>«</a> "; list.InnerHtml += "<a href=" + pageUrl + "Page=" + GetPage(currentPage - 1) + "><</a> "; ShowStartPage(); //计算当前页的前三页. ShowEndPage(); //计算当前页的后四页. for (int i = startPage; i <= endPage; i++) { if (i == currentPage) { list.InnerHtml += "<a href=" + pageUrl + "Page=" + i.ToString() + "><font style='color:red;'>" + i.ToString() + "</font></a> "; } else { list.InnerHtml += "<a href=" + pageUrl + "Page=" + i.ToString() + ">" + i.ToString() + "</a> "; } } list.InnerHtml += "<a href=" + pageUrl + "Page=" + (currentPage + 1).ToString() + ">></a> "; list.InnerHtml += "<a href=" + pageUrl + "Page=" + pageCount.ToString() + ">»</a>"; 希望对你有帮助,谢谢! |
相关文章推荐
- ASP.NET分页存储过程自定义用户控件
- asp.net webform自定义分页控件
- asp.net在后台给前台的控件设置Style属性与坐标,后台设置CSS样式,后台获取前台控件坐标
- Asp.net 利用Repeater和ObjectDataSource 实现自定义分页控件
- ASP.NET分页存储过程自定义用户控件
- asp.net后台获取前台html控件的值的方法
- Asp.Net 可自定义分页用户控件
- ASP.NET用户自定义分页控件
- ASP.NET C# 后台输出的带页码的分页函数(不用控件)
- ASP.NET分页存储过程自定义用户控件
- ASP.NET 数据列表控件的分页总结(一)-----自定义方法分页和PageDataSource类分页(转)
- Asp.net 利用Repeater和ObjectDataSource 实现自定义分页控件
- 为后台控件注册前台事件[Asp.Net]
- asp.net在后台给前台的控件设置Style属性与坐标,后台设置CSS样式,后台获取前台控件坐标
- ASP.NET 后台CS访问前台HTMLSELECT控件的值
- asp.net 在后台给前台的控件设置Style属性与坐标,后台设置CSS样式,后台获取前台控件坐标
- 分页查询--前台HTML+后台asp.net代码
- asp.net web页面自定义分页控件
- [原]asp.net自定义分页用户控件
- ASP.NET(C#)——关于后台变量和前台控件