asp.net自定义分页
时间:2011-05-12 来源:高兴happy
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"> 页</asp:TableCell>
</asp:TableRow>
</asp:Table>
分页控件后台代码:
View Codeusing 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 Codeusing 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;
}
}
相关阅读 更多 +