前台ASPX页(可以绑定的控件是:DataGrid,GridView,Repeater,DataList等等)
1:先注册一下控件,不要跟我说看不懂下面这句
<%@ Register Assembly="CommonClass" Namespace="WebPageControls" TagPrefix="Ipage" %>
2:绑定,更加简单,在适合的位置放上这句分页代码:(还有些属性自己试试)
<Ipage:PagerBar ID="pbComment" runat="server" EnableViewState="False" PageSize="20"></Ipage:PagerBar>
3:后台绑定:(更加简单)
int recordCount;//总记录数
CategoryData cd = new CategoryData();
List<CategoryInfo> ciList = cd.GetSoftList(this.pbComment.CurrentPage, this.pbComment.PageSize, out recordCount);//传递参数,必须要有这三个
pbComment.RecordCount = recordCount;//因为是输出参数,所以得到他的总记录数
GridView1.DataSource = ciList;//最后绑定
GridView1.DataBind();
4:SQL语句
Create PROCEDURE [dbo].[SP_Soft_GetSoftList]
@CurrentPage int, @PageSize int, @RecordCount int output
AS
DECLARE @MinPage int, @MaxPage int
SET @MinPage = (@CurrentPage - 1) * @PageSize + 1
SET @MaxPage = @MinPage + @PageSize
BEGIN
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY SoftID DESC) AS RowNumber FROM SoftInfo ) AS A WHERE RowNumber BETWEEN @MinPage AND @MaxPage
SELECT @RecordCount = COUNT(SoftID) FROM Soft_Info
END
注意:sql2005的新特性:ROW_NUMBER(),自己查帮助看看介绍,实在太爽了这个,SoftInfo 是表名.
cs代码:编译后就可以用
using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
[assembly: TagPrefix("WebPageControls", "Ipage")]
namespace ng.Common.WebControls
{
[ToolboxData("<{0}:PagerBar runat=/"server/"></{0}:PagerBar>")]
public class PagerBar : Control, INamingContainer
{
#region Data(数据)
#region CurrentPage
[Category("Data")]
[Browsable(false)]
public int CurrentPage
{
get
{
if(ViewState["CurrentPage"] == null)
{
int currentPage;
if(int.TryParse(HttpContext.Current.Request.QueryString[this.PageParamName], out currentPage))
{
ViewState["CurrentPage"] = currentPage;
}
else
{
ViewState["CurrentPage"] = 1;
}
}
return (int)ViewState["CurrentPage"];
}
set
{
ViewState["CurrentPage"] = value;
}
}
#endregion
#region PageSize
[Category("Data")]
[DefaultValue(10)]
public int PageSize
{
get
{
int pageSize = (ViewState["PageSize"] == null) ? 10 : (int)ViewState["PageSize"];
return (pageSize > 0) ? pageSize : 0;
}
set
{
ViewState["PageSize"] = value;
}
}
#endregion
#region RecordCount
[Category("Data")]
[Browsable(false)]
public int RecordCount
{
get
{
return (ViewState["RecordCount"] == null) ? 0 : (int)ViewState["RecordCount"];
}
set
{
ViewState["RecordCount"] = value;
}
}
#endregion
#region PageCount
[Browsable(false)]
public int PageCount
{
get
{
return (int)Math.Ceiling((double)this.RecordCount / this.PageSize);
}
}
#endregion
#endregion
#region Navigation(导航)
#region PageParamName
[Category("Navigation")]
[DefaultValue("CurrentPage")]
public string PageParamName
{
get
{
return (ViewState["PageParamName"] == null) ? "CurrentPage" : (string)ViewState["PageParamName"];
}
set
{
ViewState["PageParamName"] = value;
}
}
#endregion
#region FirstPageText
[Category("Navigation")]
[DefaultValue("首页")]
public string FirstPageText
{
get
{
return (ViewState["FirstPageText"] == null) ? "首页" : (string)ViewState["FirstPageText"];
}
set
{
ViewState["FirstPageText"] = value;
}
}
#endregion
#region PrePageText
[Category("Navigation")]
[DefaultValue("上一页")]
public string PrePageText
{
get
{
return (ViewState["PrePageText"] == null) ? "上一页" : (string)ViewState["PrePageText"];
}
set
{
ViewState["PrePageText"] = value;
}
}
#endregion
#region NextPageText
[Category("Navigation")]
[DefaultValue("下一页")]
public string NextPageText
{
get
{
return (ViewState["NextPageText"] == null) ? "下一页" : (string)ViewState["NextPageText"];
}
set
{
ViewState["NextPageText"] = value;
}
}
#endregion
#region LastPageText
[Category("Navigation")]
[DefaultValue("末页")]
public string LastPageText
{
get
{
return (ViewState["LastPageText"] == null) ? "末页" : (string)ViewState["LastPageText"];
}
set
{
ViewState["LastPageText"] = value;
}
}
#endregion
#endregion
#region Layout(布局)
#region Width
[Category("Layout")]
public Unit Width
{
get
{
return (ViewState["Width"] == null) ? Unit.Percentage(100) : (Unit)ViewState["Width"];
}
set
{
ViewState["Width"] = value;
}
}
#endregion
#region Height
[Category("Layout")]
public Unit Height
{
get
{
return (ViewState["Height"] == null) ? Unit.Pixel(20) : (Unit)ViewState["Height"];
}
set
{
ViewState["Height"] = value;
}
}
#endregion
#region CellPadding
[Category("Layout")]
[DefaultValue(0)]
public int CellPadding
{
get
{
return (ViewState["CellPadding"] == null) ? 0 : (int)ViewState["CellPadding"];
}
set
{
ViewState["CellPadding"] = value;
}
}
#endregion
#region CellSpacing
[Category("Layout")]
[DefaultValue(0)]
public int CellSpacing
{
get
{
return (ViewState["CellSpacing"] == null) ? 0 : (int)ViewState["CellSpacing"];
}
set
{
ViewState["CellSpacing"] = value;
}
}
#endregion
#endregion
#region Appearance(外观)
#region TableCssClass
[Category("Appearance")]
public string TableCssClass
{
get
{
return (ViewState["TableCssClass"] == null) ? string.Empty : (string)ViewState["TableCssClass"];
}
set
{
ViewState["TableCssClass"] = value;
}
}
#endregion
#region TableCellCssClass
[Category("Appearance")]
public string TableCellCssClass
{
get
{
return (ViewState["TableCellCssClass"] == null) ? string.Empty : (string)ViewState["TableCellCssClass"];
}
set
{
ViewState["TableCellCssClass"] = value;
}
}
#endregion
#region PagerCssClass
[Category("Appearance")]
public string PagerCssClass
{
get
{
return (ViewState["PagerCssClass"] == null) ? string.Empty : (string)ViewState["PagerCssClass"];
}
set
{
ViewState["PagerCssClass"] = value;
}
}
#endregion
#endregion
#region GetPagerUrl
private string GetPagerUrl()
{
StringBuilder sbUrl = new StringBuilder(HttpContext.Current.Request.Path);
sbUrl.Append('?');
NameValueCollection query = HttpContext.Current.Request.QueryString;
for(int i = 0; i < query.Count; i++)
{
if(query.GetKey(i) != this.PageParamName)
{
sbUrl.Append(query.GetKey(i));
sbUrl.Append('=');
sbUrl.Append(HttpContext.Current.Server.UrlEncode(query.Get(i)));
sbUrl.Append('&');
}
}
sbUrl.Append(this.PageParamName);
sbUrl.Append('=');
return sbUrl.ToString();
}
#endregion
#region GetPagerLinks
private string[] GetPagerLinks()
{
string[] links = new string[5];
int prePage = 1;
int nextPage = 1;
if(this.RecordCount > 0)
{
string pagerUrl = this.GetPagerUrl();
prePage = (this.CurrentPage > 1) ? (this.CurrentPage - 1) : 1;
nextPage = (this.CurrentPage + 1 > this.PageCount) ? this.PageCount : this.CurrentPage + 1;
links[0] = (this.CurrentPage == 1) ? null : pagerUrl + "1";
links[1] = (this.CurrentPage == prePage) ? null : pagerUrl + prePage.ToString();
links[2] = (this.CurrentPage == nextPage) ? null : pagerUrl + nextPage.ToString();
links[3] = (this.CurrentPage == this.PageCount) ? null : pagerUrl + PageCount.ToString();
links[4] = pagerUrl;
return links;
}
else
{
this.CurrentPage = 0;
}
return links;
}
#endregion
#region GetHTML
private void GetHTML(HtmlTextWriter writer)
{
string[] links = this.GetPagerLinks();
writer.WriteBeginTag("table");
writer.WriteAttribute("width", this.Width.ToString());
writer.WriteAttribute("height", this.Height.ToString());
writer.WriteAttribute("cellpadding", this.CellPadding.ToString());
writer.WriteAttribute("cellspacing", this.CellSpacing.ToString());
writer.WriteAttribute("class", this.TableCssClass);
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteFullBeginTag("tr");
writer.WriteBeginTag("td");
writer.WriteAttribute("align", "left");
writer.WriteAttribute("width", "100");
if(this.TableCellCssClass.Length != 0)
{
writer.WriteAttribute("class", this.TableCellCssClass);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteFullBeginTag("span");
writer.Write(" 共 {0} 条数据", this.RecordCount);
writer.WriteEndTag("span");
writer.WriteEndTag("td");
writer.WriteBeginTag("td");
writer.WriteAttribute("align", "center");
if(this.TableCellCssClass.Length != 0)
{
writer.WriteAttribute("align", this.TableCellCssClass);
}
writer.Write(HtmlTextWriter.TagRightChar);
//首页连接
writer.WriteBeginTag("a");
writer.WriteAttribute("class", this.PagerCssClass);
if(links[0] != null)
{
writer.WriteAttribute("href", links[0]);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(this.FirstPageText);
writer.WriteEndTag("a");
writer.Write(" ");
//上一页连接
writer.WriteBeginTag("a");
writer.WriteAttribute("class", this.PagerCssClass);
if(links[1] != null)
{
writer.WriteAttribute("href", links[1]);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(this.PrePageText);
writer.WriteEndTag("a");
writer.Write(" ");
//下一页连接
writer.WriteBeginTag("a");
writer.WriteAttribute("class", this.PagerCssClass);
if(links[2] != null)
{
writer.WriteAttribute("href", links[2]);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(this.NextPageText);
writer.WriteEndTag("a");
writer.Write(" ");
//末页连接
writer.WriteBeginTag("a");
writer.WriteAttribute("class", this.PagerCssClass);
if(links[3] != null)
{
writer.WriteAttribute("href", links[3]);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(this.LastPageText);
writer.WriteEndTag("a");
writer.Write(" 转到");
writer.WriteBeginTag("select");
writer.WriteAttribute("onchange", string.Format("window.location.href='{0}'+this.options[this.selectedIndex].value;", links[4]));
writer.Write(HtmlTextWriter.TagRightChar);
for(int i = 1; i <= this.PageCount; i++)
{
writer.WriteBeginTag("option");
writer.WriteAttribute("value", i.ToString());
if(i == this.CurrentPage)
{
writer.WriteAttribute("selected", "true");
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(i);
writer.WriteEndTag("option");
}
writer.WriteEndTag("select");
writer.Write("页");
writer.WriteEndTag("td");
writer.WriteBeginTag("td");
writer.WriteAttribute("align", "right");
if(this.TableCellCssClass.Length != 0)
{
writer.WriteAttribute("class", this.TableCellCssClass);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write("第 {0} / {1} 页 ", this.CurrentPage, this.PageCount);
writer.WriteEndTag("td");
writer.WriteEndTag("tr");
writer.WriteEndTag("table");
}
#endregion
#region override Render
protected override void Render(HtmlTextWriter writer)
{
this.GetHTML(writer);
base.Render(writer);
}
#endregion
}
}