您的位置:首页 > 编程语言 > ASP

一个比较好的Asp.net的分页代码,检索速度很快!

2016-09-25 19:13 656 查看
一个非常快的基于SQL Server和Asp.net的的分页程序,使用的时候,请根据自己的需要修改必要的代码后再使用,这里我就不写怎么改了,相信用.net的人,应该是没问题的,下面的代码都应该看得懂。*^_^*


首先,.aspx部分

<asp:GridView ID="gvVisitor" runat="server">
<Columns>
<asp:TemplateField HeaderText="序号">
<ItemStyle Width="40px"/>
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "ID")%></ItemTemplate>
</asp:TemplateField>
<%-- 类似的TemplateField,省略--%>......
</Columns>
</asp:GridView>
<%-- 以下为分页所使用的链接,含“记录数”“当前页”“页数”“首页”“上一页”“下一页”“尾页”“页码跳转” --%>
<div id="StatisticsPages">
共 <asp:Label ID="lbTotalRecord" runat="server" SkinID="Page"/> 条记录
第 <asp:Label ID="lbCurrentPage" runat="server" SkinID="Page"/> 页 / 共
<asp:Label ID="lbTotalPage" runat="server" SkinID="Page"/> 页
<asp:LinkButton ID="lbFirstPage" runat="server" CommandName="0" Text="首页" />
<asp:LinkButton ID="lbPreviousPage" runat="server" CommandName="previous" Text="上一页" />
<asp:LinkButton ID="lbNextPage" runat="server" CommandName="next" Text="下一页" />
<asp:LinkButton ID="lbLastPage" runat="server" CommandName="last" Text="尾页" />
转至<asp:TextBox ID="tbGotoPage" runat="server" SkinID="Page" MaxLength="5" AutoPostBack="true" /> 页
</div>


…………………………………..这之后是关键的aspx.cs文件

const int PageSize = 10;//定义每页显示记录数量
int _TotalPage, _TotalRecord, _CurrentPage, _Pages, _JumpPage;
//定义几个保存分页参数变量:总页数、总记录数、当前页码、页码数、跳转页码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
_TotalRecord = Calculate();//通过Calculate()函数获取总记录数
_TotalPage = _TotalRecord / PageSize + OverPage();
//计算总页数(加上OverPage()函数防止有余数造成显示数据不完整)
ViewState["PageCounts"] = _TotalRecord / PageSize - ModPage();//保存总页参数到ViewState
(减去ModPage()函数防止SQL语句执行时溢出查询范围,可以用存储过程分页算法来理解这句)
ViewState["PageIndex"] = 0;//保存一个为0的页面索引值到ViewState
ViewState["JumpPages"] = _TotalPage;//保存_TotalPage到ViewState,跳页时判断用户输入数是否超出页码范围
//显示lbTotalPage、lbTotalRecord的状态
lbTotalPage.Text = _TotalPage.ToString();
lbTotalRecord.Text = _TotalRecord.ToString();
//判断跳页文本框失效
if (_TotalRecord <= PageSize)
{
tbGotoPage.Enabled = false;
}
BindStatisticsData();
}
}
//计算余页
public int OverPage()
{
int iPages = 0;
if (_TotalRecord % PageSize != 0)
iPages = 1;
else
iPages = 0;
return iPages;
}
//计算余页(防止SQL语句执行时溢出查询范围)
public int ModPage()
{
int iPages = 0;
if (_TotalRecord % PageSize == 0 && _TotalRecord != 0)
iPages = 1;
else
iPages = 0;
return iPages;
}
//计算总记录数
public static int Calculate()
{
int iRecordCount = 0;
StatisticsManageInfo StatisticsManageInfo = new StatisticsManageInfo();
SqlDataReader dr = StatisticsManageInfo.Visitor_GetAll();
if(dr.Read())
iRecordCount = Int32.Parse(dr["Total"].ToString());
dr.Close();
return iRecordCount;
}
//跳页代码
private void GotoPage_TextChanged(object sender, EventArgs e)
{
try
{
_JumpPage = (int)ViewState["JumpPages"];//从ViewState中读取可用页数值保存到_JumpPage变量值
//判断用户输入值是否超过可用页数范围值
if (Int32.Parse(tbGotoPage.Text) > _JumpPage || Int32.Parse(tbGotoPage.Text) < 0)
{
Response.Write("<script>alert('您所输入的页码范围超出了总记录数!');</script>");
}
else
{
int iInputPage = Int32.Parse(tbGotoPage.Text.ToString()) - 1;
ViewState["PageIndex"] = iInputPage;
BindStatisticsData();
}
}
catch (Exception ex)
{
Response.Write("<script>alert('" + ex.Message + "');</script>");
}
}
//对四个按钮(首页、上一页、下一页、尾页)返回的CommandName值进行操作
private void Page_OnClick(object sender, CommandEventArgs e)
{
_CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行参数运算
_Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数运算
String Cmd = e.CommandName;
switch (Cmd)
{
case"next":
_CurrentPage++;
break;
case "previous":
_CurrentPage--;
break;
case "last":
_CurrentPage = _Pages;
break;
default:
_CurrentPage = 0;
break;
}
ViewState["PageIndex"] = _CurrentPage;//将运算后的CurrentPage变量再次保存至ViewState
BindStatisticsData();
}
private void BindStatisticsData()
{
_CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行按钮失效运算
_Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数进行按钮失效运算
if (_CurrentPage + 1 > 1)
{
lbFirstPage.Enabled = true;
lbPreviousPage.Enabled = true;
}
else
{
lbFirstPage.Enabled = false;
lbPreviousPage.Enabled = false;
}
if (_CurrentPage == _Pages)
{
lbNextPage.Enabled = false;
lbLastPage.Enabled = false;
}
else
{
lbNextPage.Enabled = true;
lbLastPage.Enabled = true;
}
//以下是从数据库获取表数据,并绑定到GridView控件,下面我用了SQLHelper来完成,通过存储过程调用数据库数据。
StatisticsManageInfo StatisticsManageInfo = new StatisticsManageInfo();
SqlDataReader dr = StatisticsManageInfo.Visitor_GetVisitor(PageSize,_CurrentPage);
gvVisitor.DataSource = dr;
gvVisitor.DataBind();

lbCurrentPage.Text = (_CurrentPage + 1).ToString();
tbGotoPage.Text = (_CurrentPage + 1).ToString();
}
//以下部分,是初始化控件的,分页代码原本没有这一段,但是运行不了,所以后来我加上的。原因不明,待研究。
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.lbFirstPage.Command += new CommandEventHandler(this.Page_OnClick);
this.lbLastPage.Command += new CommandEventHandler(this.Page_OnClick);
this.lbNextPage.Command += new CommandEventHandler(this.Page_OnClick);
this.lbPreviousPage.Command += new CommandEventHandler(this.Page_OnClick);
this.tbGotoPage.TextChanged += new System.EventHandler(this.GotoPage_TextChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net 分页