asp分页控件实例超详细简单.docx
《asp分页控件实例超详细简单.docx》由会员分享,可在线阅读,更多相关《asp分页控件实例超详细简单.docx(18页珍藏版)》请在冰豆网上搜索。
![asp分页控件实例超详细简单.docx](https://file1.bdocx.com/fileroot1/2023-1/23/12862088-7975-42fc-891e-15354fb4bfb5/12862088-7975-42fc-891e-15354fb4bfb51.gif)
asp分页控件实例超详细简单
由于项目开发中需要用到分页的功能,所以自己就研究并写了一个分页控件,其中的实现全部是个人理解并进行编写的代码,而且我也写了一个事例供大家参考(没有做任何美工的处理)!
希望能对大家有所帮助!
在文章最后我会附上全部代码的链接供大家下载,并可以继续优化!
运行后的效果如下:
其中控件的核心就是定义一个委托,并开放一个事件出来!
在本控件中定义如下:
publicdelegatevoidGoPageHandler(intPageOrder);
publiceventGoPageHandlerGoPage;
说好了核心,就要看一下我写的分页控件的前台代码了,我就直接截图了:
<%@ControlLanguage="C#"AutoEventWireup="true"CodeFile="DispartPage.ascx.cs"Inherits="component_DispartPage"%>
100%;height:
21px;background:
#e7f0ff"cellpadding="0"cellspacing="0"border="0">
宋体;font-size:
12px;">
总共有:
LabelID="lblTotalCount"runat="server"Text="">0条
Label>,
LabelID="lblNumPerPage"runat="server">15
Label>条/页,
当前第LabelID="lblCurrentPage"runat="server">1
Label>/LabelID="lblTotalPage"runat="server">1
Label>页
ImageButtonID="imgBtnFirstPage"runat="server"ImageUrl="images/first.gif"OnClick="imgBtnFirstPage_Click"/>
ImageButtonID="imgBtnPrevPage"runat="server"ImageUrl="images/back.gif"OnClick="imgBtnPrevPage_Click"/>
ImageButtonID="imgBtnNextPage"runat="server"ImageUrl="images/next.gif"OnClick="imgBtnNextPage_Click"/>
ImageButtonID="imgBtnLastPage"runat="server"ImageUrl="images/last.gif"OnClick="imgBtnLastPage_Click"/>
宋体;font-size:
13px;">
TextBoxID="txtToPage"runat="server"Width="30px"Height="19px"MaxLength="10">
TextBox>
Labelrunat="server"ID="lblGoPage"Text="页">
Label>
ImageButtonID="imgBtnGoPage"runat="server"ImageUrl="images/go.gif"OnClick="imgBtnGoPage_Click"/>
|
这前台代码没什么好说的了,就是几个label加几个ImageButton控件(每个ImageButton控件都有一个OnClick事件,对应了后台的一个方法)喽!
下面主要来说说后台代码:
首先来说说控件的初始化页面代码:
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!
IsPostBack)
{
imgBtnPrevPage.Enabled=false;//首次加载上一页按钮不可用
if(this.PageCount==1)//如果页数为1,那么下一页按钮也不可用
{
imgBtnNextPage.Enabled=false;
}
}
}
下面就改定义一下这个分页控件的属性了,通过属性你可以定义控件的大小等等,当然了你还可以自己开放更多的属性,比如“上一页”“下一页”这些ImageButton控件的图片。
#region属性
#region当前页
///
///当前页
///
publicintCurrentPage
{
set
{
ViewState["CurrentPage"]=value;
this.lblCurrentPage.Text=value.ToString();
}
get
{
if(ViewState["CurrentPage"]==null)return1;
return(int)ViewState["CurrentPage"];
}
}
#endregion
#region当前页序号
///
///当前页的序号
///
publicintCurrentPageNo
{
get
{
if(this.txtToPage.Text.Trim()!
="")returnConvert.ToInt16(this.txtToPage.Text.Trim());
elsereturn1;
}
set
{
this.txtToPage.Text=value.ToString();
}
}
#endregion
#region页面的总数
///
///页面的总数,来自数据库查询设置
///
publicintPageCount
{
get
{
try
{
returnConvert.ToInt32(ViewState["PageCount"]);
}
catch
{
return0;
}
}
set
{
ViewState["PageCount"]=value;
}
}
#endregion
#region每页记录数
///
///每页记录数
///
publicintPageSize
{
get
{
if(ViewState["PageSize"]==null)return15;
return(int)ViewState["PageSize"];
}
set
{
ViewState["PageSize"]=value;
}
}
#endregion
#region总共条数
publicintTotalCount
{
get
{
try
{
return(int)ViewState["RecordCount"];
}
catch
{
return0;
}
}
set
{
if(value==0)
{
ViewState["PageCount"]=0;
}
elseif(value{
ViewState["PageCount"]=1;
}
else
{
if(value%PageSize==0)
{
ViewState["PageCount"]=value/PageSize;
}
else
{
ViewState["PageCount"]=(value-value%PageSize)/PageSize+1;
}
}
ViewState["RecordCount"]=value;
this.lblTotalCount.Text=value.ToString();
this.lblNumPerPage.Text=PageSize.ToString();
this.lblTotalPage.Text=PageCount.ToString();
}
}
#endregion
#endregion
接下来就要写这个分页控件ImageButton控件的对应的OnClick事件的代码了!
我都已经做了注释,就直接粘贴代码了(总共有五个ImageButton控件)!
#region首页按钮事件
///
///首页
///
///
///
protectedvoidimgBtnFirstPage_Click(objectsender,ImageClickEventArgse)
{
intPageOrder=1;
if(JudgePageOrder(PageOrder)&&(GoPage!
=null))
{
OnGoToPage(PageOrder);
}
imgBtnPrevPage.Enabled=false;//已经处于首页则上一页按钮不可用
if(this.PageCount!
=1)//如果总页数不为1则使下一页按钮可用
{
imgBtnNextPage.Enabled=true;
}
}
#endregion
#region上一页按钮事件
///
///上一页
///
///
///
protectedvoidimgBtnPrevPage_Click(objectsender,ImageClickEventArgse)
{
if(this.CurrentPage>1)
{
intPageOrder=this.CurrentPage-1;
if(JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
if(this.CurrentPage==1)//如果当前页已经是第一页了,则是上一页按钮不可用
{
imgBtnPrevPage.Enabled=false;
}
if(this.CurrentPage!
=this.PageCount)//如果当前页不等于总页数,则使得下一页按钮可用
{
imgBtnNextPage.Enabled=true;
}
}
else
{
ScriptManager.RegisterStartupScript(this,this.GetType(),"info","alert('这已经是第一页了!
');",true);
return;
}
}
#endregion
#region上一页按钮事件
///
///下一页
///
///
///
protectedvoidimgBtnNextPage_Click(objectsender,ImageClickEventArgse)
{
if(this.CurrentPage{
intPageOrder=this.CurrentPage+1;
if(JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
if(this.CurrentPage==this.PageCount)//如果当前页等于总页数则使得下一页按钮不可用
{
imgBtnNextPage.Enabled=false;
}
if(this.CurrentPage!
=1)//如果当前页不等于1则使得前一页按钮可用
{
imgBtnPrevPage.Enabled=true;
}
}
else
{
ScriptManager.RegisterStartupScript(this,this.GetType(),"info","alert('这已经是最后一页了!
');",true);
return;
}
}
#endregion
#region尾页按钮事件
///
///尾页
///
///
///
protectedvoidimgBtnLastPage_Click(objectsender,ImageClickEventArgse)
{
intPageOrder=this.PageCount;
if(JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
imgBtnNextPage.Enabled=false;//已经处于尾页,使下一页按钮不可用
if(this.PageCount!
=1)//如果总页数不等于1,则使得前一页按钮可用
{
imgBtnPrevPage.Enabled=true;
}
}
#endregion
#region转到指定页按钮事件
///
///转到指定页
///
///
///
protectedvoidimgBtnGoPage_Click(objectsender,ImageClickEventArgse)
{
try
{
if(string.IsNullOrEmpty(txtToPage.Text.Trim()))
{
return;
}
if(!
IsInt(txtToPage.Text.Trim()))
{
ScriptManager.RegisterStartupScript(this,this.GetType(),"info","alert('请输入整数!
');",true);
return;
}
if(Convert.ToInt64(txtToPage.Text.Trim())>PageCount)
{
ScriptManager.RegisterStartupScript(this,this.GetType(),"info","alert('请输入小于最大页数的整数!
');",true);
return;
}
if(Convert.ToInt32(txtToPage.Text.Trim())<1)
{
ScriptManager.RegisterStartupScript(this,this.GetType(),"info","alert('请输入大于0的整数!
');",true);
return;
}
intpage=Convert.ToInt32(txtToPage.Text);
intPageOrder=page;
if(JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
}
catch
{
txtToPage.Text="";
}
}
#endregion
大家发现没有,实现imgBtnGoPage_Click事件的时候调用了一个IsInt()方法,这个方法的实现如下:
#region验证用户输入转到页面的正确性
privateboolIsInt(stringtoPage)
{
boolflag=false;
if(string.IsNullOrEmpty(toPage))
returnflag;
else
{
flag=Regex.IsMatch(toPage,@"^-?
\d+$");
}
returnflag;
}
#endregion
好了,再仔细观察代码是不是发现,这几个事件里面都有一段相同的代码:
if(JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
我来详细的解释一下:
JudgePageOrder(PageOrder)用来判断跳转的页面是否合法(通俗的讲就是有没有超出页面范围):
#region判断PageOrder的合法性
///
///判断PageOrder的合法性
///
///需要判断的PageOrder
///是否合法
privateboolJudgePageOrder(intPageOrder)
{
if(PageOrder<1)
returnfalse;
if(PageOrder>PageCount)
returnfalse;
returntrue;
}
#endregion
OnGoToPage(PageOrder)就是我们文章开始讲的核心了,是这个分页控件的核心!
在后面的实例中我会告诉大家如何来用。
先把代码罗列给大家:
protectedvirtualboolOnGoToPage(intgotoPageIndex)
{
if(GoPage!
=null)
{
this.CurrentPage=gotoPageIndex;
GoPage(gotoPageIndex);//触发核心事件,来关联数据
}
returntrue;
}
分页控件已经描述完了,由于个人不擅长讲解,所以请大家包涵。
下面继续讲解这个分页控件的调用的一个实例!
前台代码有两点需要注意:
1.需要注册这个分页控件。
<%@Registersrc="DispartPage.ascx"tagname="DispartPage"tagprefix="uc1"%>
2.调用的代码是:
DispartPageID="DispartPage1"runat="server"/>
完整的代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="CodeMgr.aspx.cs"Inherits="CodeMgr"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@RegisterAssembly="System.Web.Extensions,Version=1.0.61025.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"Namespace="System.Web.UI"TagPrefix="asp"%>
<%@Registersrc="DispartPage.ascx"tagname="DispartPage"tagprefix="uc1"%>
//www.w3.org/1999/xhtml">
分页控件
GridViewID="grdType"PageSize="5"runat="server"CssClass="gridview"Width="100%"AllowPaging="True"AutoGenerateColumns="False"OnRowCommand="grdType_RowCommand">
BoundFieldHeaderText="类型编码"DataField="code_type_no"/>
Bo
展开阅读全文
相关搜索
|