asp.net自定义分页

       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 >

分页控件后台代码:

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;
}
}

调用实现:

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 ;
}
}

转载于:https://www.cnblogs.com/happygx/archive/2011/05/12/2044235.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值