GridView也自带分页技术,但是这种方式值只用于小数量的数据,因为它是将整个查询内容一次性查出来加载在内存中,这样数据量大的话就会造成系统反应迟缓。但是对于Row_Nomber()来说数据量大的话确实是明智之举,但是小数量的话和一次性全部加载的效果差距不明显,所以在实际应用中还是根据实际情况来选择吧!
下面来介绍用Row_Nomber()分页:
代码很简单, 因为代码上已加了相应的注释,所以就再不多做代码解释,
先编写分页用户控件:
前台效果
代码:
View Code
<%
@ Control Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
WebUserControl.ascx.cs
"
Inherits
=
"
control_WebUserControl
"
%>
< asp:Table ID = " Table1 " runat = " server " Width = " 100% " >
< asp:TableRow ID = " TableRow1 " runat = " server " >
< asp:TableCell ID = " TableCell0 " runat = " server " ></ asp:TableCell >
< asp:TableCell ID = " TableCell1 " runat = " server " Width = " 140px " >
< span > 页次: </ span >< asp:Label ID = " LabelMessage " runat = " server " Text = " 1/1 " ></ asp:Label ></ asp:TableCell >
< asp:TableCell ID = " TableCell2 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonFirst " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " First " Enabled = " False " > 首页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell3 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonPrevious " runat = " server " OnClick = " LinkButton_Click "
CommandArgument = " 1 " CommandName = " Previous " Enabled = " False " > 上页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell4 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonNext " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " Next " Enabled = " False " > 下页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell5 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonLast " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " Last " Enabled = " False " > 末页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell6 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonGoto " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " Goto " > 转到 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell7 " runat = " server " Width = " 40px " >
< asp:TextBox ID = " TextBoxPage " runat = " server " Width = " 35px " ></ asp:TextBox ></ asp:TableCell >
< asp:TableCell ID = " TableCell8 " runat = " server " Width = " 20px " >& nbsp;页 </ asp:TableCell >
</ asp:TableRow >
</ asp:Table >
< asp:Table ID = " Table1 " runat = " server " Width = " 100% " >
< asp:TableRow ID = " TableRow1 " runat = " server " >
< asp:TableCell ID = " TableCell0 " runat = " server " ></ asp:TableCell >
< asp:TableCell ID = " TableCell1 " runat = " server " Width = " 140px " >
< span > 页次: </ span >< asp:Label ID = " LabelMessage " runat = " server " Text = " 1/1 " ></ asp:Label ></ asp:TableCell >
< asp:TableCell ID = " TableCell2 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonFirst " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " First " Enabled = " False " > 首页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell3 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonPrevious " runat = " server " OnClick = " LinkButton_Click "
CommandArgument = " 1 " CommandName = " Previous " Enabled = " False " > 上页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell4 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonNext " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " Next " Enabled = " False " > 下页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell5 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonLast " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " Last " Enabled = " False " > 末页 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell6 " runat = " server " Width = " 30px " >
< asp:LinkButton ID = " LinkButtonGoto " runat = " server " OnClick = " LinkButton_Click " CommandArgument = " 1 "
CommandName = " Goto " > 转到 </ asp:LinkButton ></ asp:TableCell >
< asp:TableCell ID = " TableCell7 " runat = " server " Width = " 40px " >
< asp:TextBox ID = " TextBoxPage " runat = " server " Width = " 35px " ></ asp:TextBox ></ asp:TableCell >
< asp:TableCell ID = " TableCell8 " runat = " server " Width = " 20px " >& nbsp;页 </ asp:TableCell >
</ asp:TableRow >
</ asp:Table >
分页控件后台代码:
View Code
using
System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class control_WebUserControl : System.Web.UI.UserControl
{
// 设置条数数
private int pageCount = 1 ;
public int PageCount
{
get
{ // 先从ViewState中读取总页数,如果有总会页数的值,则将值返回,否则认为是一页
if (ViewState[ " PageCount " ] != null )
{
return Convert.ToInt32(ViewState[ " PageCount " ]);
}
else
{
return 1 ;
}
}
set
{
if (pageCount != value)
{
pageCount = value;
ViewState[ " PageCount " ] = pageCount;
ChangePage(currentPage);
}
}
}
// 当前页数
private int currentPage = 1 ;
public int CurrentPage
{
get
{
if (ViewState[ " CurrentPage " ] != null )
{
return Convert.ToInt32(ViewState[ " CurrentPage " ]);
}
else
{
return 1 ;
}
}
set
{
if (currentPage != value)
{
currentPage = value;
// 将当前页数保存在 ViewState["CurrentPage"]
ViewState[ " CurrentPage " ] = currentPage;
// 设置按钮启用
ChangePage(currentPage);
}
}
}
// 总页数
private int recorderCount = 1 ;
public int RecorderCount
{
get { return recorderCount; }
set
{
recorderCount = value;
PageCount = (recorderCount + PageSize - 1 ) / PageSize;
}
}
// 每页数量
private int pageSize = 1 ;
public int PageSize
{
get
{
if (ViewState[ " PageSize " ] != null )
{
return Convert.ToInt32(ViewState[ " PageSize " ]);
}
else
{
return 1 ;
}
}
set
{
if (pageSize != value)
{
pageSize = value;
// 将总页数保存在ViewState["PageSize"] 中
ViewState[ " PageSize " ] = pageSize;
ChangePage(currentPage);
}
}
}
/// <summary>
/// 添加图层之前
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// 用委托添加添加ChangePage委托
public delegate void PageChangedEventHandler( object sender, int e);
// 用委托改ChangePage添加委托
public event PageChangedEventHandler PageChanged;
protected virtual void OnPageChanged( int e)
{
// 如果存在事件响应,则将当前点击的事件和页数传递
if (PageChanged != null )
{
PageChanged( this , e);
}
}
protected void Page_Load( object sender, EventArgs e)
{
if ( ! Page.IsPostBack)
{
// ViewState["CurrentPage"] = 1;
// ViewState["PageCount"] = 1;
}
else
{
currentPage = Convert.ToInt32(ViewState[ " CurrentPage " ]);
pageCount = Convert.ToInt32(ViewState[ " PageCount " ]);
pageSize = Convert.ToInt32(ViewState[ " PageSize " ]);
}
}
protected void LinkButton_Click( object sender, EventArgs e)
{
int iTmpCurrent = 1 ;
LinkButton myLinkButton = (LinkButton)sender;
if (myLinkButton.CommandName == " First " )
{
iTmpCurrent = 1 ;
}
else if (myLinkButton.CommandName == " Previous " )
{
iTmpCurrent = currentPage - 1 ;
}
else if (myLinkButton.CommandName == " Next " )
{
iTmpCurrent = currentPage + 1 ;
}
else if (myLinkButton.CommandName == " Last " )
{
iTmpCurrent = pageCount;
}
else if (myLinkButton.CommandName == " Goto " )
{
int iGoto = 1 ;
if ( int .TryParse( this .TextBoxPage.Text, out iGoto))
{
if (iGoto <= 1 )
{
iGoto = 1 ;
}
if (iGoto > pageCount)
{
iGoto = pageCount;
}
iTmpCurrent = iGoto;
}
else
{
iTmpCurrent = currentPage;
}
}
// iTmpCurrent要跳转的页数
ChangePage(iTmpCurrent);
// currentPage当前页数,点击事件触发
OnPageChanged(currentPage);
}
// 改变页数方法
private void ChangePage( int page)
{
currentPage = page;
// 加载热点商品推荐
this .LinkButtonGoto.Enabled = true ;
if (page <= 1 )
{
this .LinkButtonFirst.Enabled = false ;
this .LinkButtonPrevious.Enabled = false ;
this .LinkButtonNext.Enabled = true ;
this .LinkButtonLast.Enabled = true ;
currentPage = 1 ;
}
else if (page >= pageCount)
{
this .LinkButtonFirst.Enabled = true ;
this .LinkButtonPrevious.Enabled = true ;
this .LinkButtonNext.Enabled = false ;
this .LinkButtonLast.Enabled = false ;
currentPage = pageCount;
}
else
{
this .LinkButtonFirst.Enabled = true ;
this .LinkButtonPrevious.Enabled = true ;
this .LinkButtonNext.Enabled = true ;
this .LinkButtonLast.Enabled = true ;
}
if (pageCount <= 1 )
{
this .LinkButtonFirst.Enabled = false ;
this .LinkButtonPrevious.Enabled = false ;
this .LinkButtonNext.Enabled = false ;
this .LinkButtonLast.Enabled = false ;
this .LinkButtonGoto.Enabled = false ;
}
// currentPage.ToString()当前页数。pageCount.ToString();总页数
this .LabelMessage.Text = currentPage.ToString() + " / " + pageCount.ToString();
this .TextBoxPage.Text = currentPage.ToString();
// 将当前的页数保存在ViewState中
ViewState[ " CurrentPage " ] = currentPage;
}
}
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class control_WebUserControl : System.Web.UI.UserControl
{
// 设置条数数
private int pageCount = 1 ;
public int PageCount
{
get
{ // 先从ViewState中读取总页数,如果有总会页数的值,则将值返回,否则认为是一页
if (ViewState[ " PageCount " ] != null )
{
return Convert.ToInt32(ViewState[ " PageCount " ]);
}
else
{
return 1 ;
}
}
set
{
if (pageCount != value)
{
pageCount = value;
ViewState[ " PageCount " ] = pageCount;
ChangePage(currentPage);
}
}
}
// 当前页数
private int currentPage = 1 ;
public int CurrentPage
{
get
{
if (ViewState[ " CurrentPage " ] != null )
{
return Convert.ToInt32(ViewState[ " CurrentPage " ]);
}
else
{
return 1 ;
}
}
set
{
if (currentPage != value)
{
currentPage = value;
// 将当前页数保存在 ViewState["CurrentPage"]
ViewState[ " CurrentPage " ] = currentPage;
// 设置按钮启用
ChangePage(currentPage);
}
}
}
// 总页数
private int recorderCount = 1 ;
public int RecorderCount
{
get { return recorderCount; }
set
{
recorderCount = value;
PageCount = (recorderCount + PageSize - 1 ) / PageSize;
}
}
// 每页数量
private int pageSize = 1 ;
public int PageSize
{
get
{
if (ViewState[ " PageSize " ] != null )
{
return Convert.ToInt32(ViewState[ " PageSize " ]);
}
else
{
return 1 ;
}
}
set
{
if (pageSize != value)
{
pageSize = value;
// 将总页数保存在ViewState["PageSize"] 中
ViewState[ " PageSize " ] = pageSize;
ChangePage(currentPage);
}
}
}
/// <summary>
/// 添加图层之前
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// 用委托添加添加ChangePage委托
public delegate void PageChangedEventHandler( object sender, int e);
// 用委托改ChangePage添加委托
public event PageChangedEventHandler PageChanged;
protected virtual void OnPageChanged( int e)
{
// 如果存在事件响应,则将当前点击的事件和页数传递
if (PageChanged != null )
{
PageChanged( this , e);
}
}
protected void Page_Load( object sender, EventArgs e)
{
if ( ! Page.IsPostBack)
{
// ViewState["CurrentPage"] = 1;
// ViewState["PageCount"] = 1;
}
else
{
currentPage = Convert.ToInt32(ViewState[ " CurrentPage " ]);
pageCount = Convert.ToInt32(ViewState[ " PageCount " ]);
pageSize = Convert.ToInt32(ViewState[ " PageSize " ]);
}
}
protected void LinkButton_Click( object sender, EventArgs e)
{
int iTmpCurrent = 1 ;
LinkButton myLinkButton = (LinkButton)sender;
if (myLinkButton.CommandName == " First " )
{
iTmpCurrent = 1 ;
}
else if (myLinkButton.CommandName == " Previous " )
{
iTmpCurrent = currentPage - 1 ;
}
else if (myLinkButton.CommandName == " Next " )
{
iTmpCurrent = currentPage + 1 ;
}
else if (myLinkButton.CommandName == " Last " )
{
iTmpCurrent = pageCount;
}
else if (myLinkButton.CommandName == " Goto " )
{
int iGoto = 1 ;
if ( int .TryParse( this .TextBoxPage.Text, out iGoto))
{
if (iGoto <= 1 )
{
iGoto = 1 ;
}
if (iGoto > pageCount)
{
iGoto = pageCount;
}
iTmpCurrent = iGoto;
}
else
{
iTmpCurrent = currentPage;
}
}
// iTmpCurrent要跳转的页数
ChangePage(iTmpCurrent);
// currentPage当前页数,点击事件触发
OnPageChanged(currentPage);
}
// 改变页数方法
private void ChangePage( int page)
{
currentPage = page;
// 加载热点商品推荐
this .LinkButtonGoto.Enabled = true ;
if (page <= 1 )
{
this .LinkButtonFirst.Enabled = false ;
this .LinkButtonPrevious.Enabled = false ;
this .LinkButtonNext.Enabled = true ;
this .LinkButtonLast.Enabled = true ;
currentPage = 1 ;
}
else if (page >= pageCount)
{
this .LinkButtonFirst.Enabled = true ;
this .LinkButtonPrevious.Enabled = true ;
this .LinkButtonNext.Enabled = false ;
this .LinkButtonLast.Enabled = false ;
currentPage = pageCount;
}
else
{
this .LinkButtonFirst.Enabled = true ;
this .LinkButtonPrevious.Enabled = true ;
this .LinkButtonNext.Enabled = true ;
this .LinkButtonLast.Enabled = true ;
}
if (pageCount <= 1 )
{
this .LinkButtonFirst.Enabled = false ;
this .LinkButtonPrevious.Enabled = false ;
this .LinkButtonNext.Enabled = false ;
this .LinkButtonLast.Enabled = false ;
this .LinkButtonGoto.Enabled = false ;
}
// currentPage.ToString()当前页数。pageCount.ToString();总页数
this .LabelMessage.Text = currentPage.ToString() + " / " + pageCount.ToString();
this .TextBoxPage.Text = currentPage.ToString();
// 将当前的页数保存在ViewState中
ViewState[ " CurrentPage " ] = currentPage;
}
}
调用实现:
View Code
using
System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class learning : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
// 设置控件点击事件
this .WebUserControl1.PageChanged += new control_WebUserControl.PageChangedEventHandler(WebUserControl1_PageChanged);
if ( ! Page.IsPostBack)
{
DataInit();
DataLoad();
}
}
void WebUserControl1_PageChanged( object sender, int e)
{
// 加载事件
DataLoad();
}
// 根据查询数据,依据控件内的当前页数和每页数量和每页大小查询 并返回
public string DataLoad()
{
string sql1 = " select ROW_NUMBER() over (order by NewsTimes) as RowNum,NewsTitle,NewsTimes,NewsURL,NewsTypeId,NewsContent,NewsId from News where NewsTypeId=2 " ;
string sql = " select * from ( " + sql1 + " ) As T where T.RowNum> " + ( this .WebUserControl1.CurrentPage - 1 ) * this .WebUserControl1.PageSize + " And T.RowNum<= " + this .WebUserControl1.CurrentPage * this .WebUserControl1.PageSize + " order by NewsTimes desc " ;
return DataLoadTitle1(sql);
}
/// <summary>
/// 返回资讯标题
/// </summary>
/// <param name="Sql"></param>
/// <returns></returns>
public static string DataLoadTitle1( string Sql)
{
Conndb.Conndb conn = new Conndb.Conndb();
conn.Open();
DataSet ds = conn.ExeSelectSql(Sql);
string sa = "" ;
string s, url, Time, s2, s1;
foreach (DataRow dr in ds.Tables[ 0 ].Rows)
{
s = dr[ " NewsTitle " ].ToString();
url = dr[ " NewsUrl " ].ToString();
Time = Convert.ToDateTime(dr[ " NewsTimes " ].ToString()).ToShortDateString();
s1 = dr[ " NewsTypeId " ].ToString();
s2 = dr[ " NewsId " ].ToString();
sa += " <div class=\"newsbodynews\"><a href=\" " + url + " ?NewsId= " + s2 + " &NewsTypeId= " + s1 + " \" target=\"_blank\"> " + s + " </a><span id=\"Span1\">【 " + Time + " 】</span></div> " ;
}
return sa;
ds.Dispose();
}
// 初次加载是保存总页数
private void DataInit()
{
string Sql = " select * from News where NewsTypeid=2 " ;
// 将数据总条数保存在用户控件
this .WebUserControl1.PageCount = Methed.count(Sql);
// 将每页显示的数量保存在用户控件
this .WebUserControl1.PageSize = 2 ;
}
}
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class learning : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
// 设置控件点击事件
this .WebUserControl1.PageChanged += new control_WebUserControl.PageChangedEventHandler(WebUserControl1_PageChanged);
if ( ! Page.IsPostBack)
{
DataInit();
DataLoad();
}
}
void WebUserControl1_PageChanged( object sender, int e)
{
// 加载事件
DataLoad();
}
// 根据查询数据,依据控件内的当前页数和每页数量和每页大小查询 并返回
public string DataLoad()
{
string sql1 = " select ROW_NUMBER() over (order by NewsTimes) as RowNum,NewsTitle,NewsTimes,NewsURL,NewsTypeId,NewsContent,NewsId from News where NewsTypeId=2 " ;
string sql = " select * from ( " + sql1 + " ) As T where T.RowNum> " + ( this .WebUserControl1.CurrentPage - 1 ) * this .WebUserControl1.PageSize + " And T.RowNum<= " + this .WebUserControl1.CurrentPage * this .WebUserControl1.PageSize + " order by NewsTimes desc " ;
return DataLoadTitle1(sql);
}
/// <summary>
/// 返回资讯标题
/// </summary>
/// <param name="Sql"></param>
/// <returns></returns>
public static string DataLoadTitle1( string Sql)
{
Conndb.Conndb conn = new Conndb.Conndb();
conn.Open();
DataSet ds = conn.ExeSelectSql(Sql);
string sa = "" ;
string s, url, Time, s2, s1;
foreach (DataRow dr in ds.Tables[ 0 ].Rows)
{
s = dr[ " NewsTitle " ].ToString();
url = dr[ " NewsUrl " ].ToString();
Time = Convert.ToDateTime(dr[ " NewsTimes " ].ToString()).ToShortDateString();
s1 = dr[ " NewsTypeId " ].ToString();
s2 = dr[ " NewsId " ].ToString();
sa += " <div class=\"newsbodynews\"><a href=\" " + url + " ?NewsId= " + s2 + " &NewsTypeId= " + s1 + " \" target=\"_blank\"> " + s + " </a><span id=\"Span1\">【 " + Time + " 】</span></div> " ;
}
return sa;
ds.Dispose();
}
// 初次加载是保存总页数
private void DataInit()
{
string Sql = " select * from News where NewsTypeid=2 " ;
// 将数据总条数保存在用户控件
this .WebUserControl1.PageCount = Methed.count(Sql);
// 将每页显示的数量保存在用户控件
this .WebUserControl1.PageSize = 2 ;
}
}