文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>asp.net自定义分页

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">&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;
}
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载