ASP.NET网站制作之实例分享:本人开辟的自界说分页控件
那做企业软件是不是最好用J2EE?分页|控件 一向以来都以为分页是贫苦的事变,.NET中固然有DATAGRID的分页,但用其他情势的列表仍旧必要利用到分页,一次一次的写倒霉于效力及面向工具的办法,用类或用户控件也总以为怪怪的,用第3方的本人以为不宁神,也不利于本人举行修正,爽性就本人写了一个。 (别的注重:在控件编译时,能够在AssemblyInfo.cs文件中设置控件的标签和称号空间,如:usingSystem.Reflection;
usingSystem.Runtime.CompilerServices;
usingSystem.Web.UI;
//自界说控件前缀 第一个参数是称号空间(必需是你的控件类的称号空间),第二个是标署名(可自界说) 记得要到场System.Web.UI;称号空间,别的将控件类内的[DefaultProperty("Text"),
ToolboxData("<PublicControls:PageNavigationrunat=server></PublicControls:PageNavigation>")]这句屏障失落
一切代码以下:
usingSystem;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.ComponentModel;
usingSystem.Collections;
usingSystem.Collections.Specialized;
namespacePublicControls
{
///<summary>
///PageNavigation分页导航控件。
///</summary>
[DefaultProperty("Text"),
ToolboxData("<PublicControls:PageNavigationrunat=server></PublicControls:PageNavigation>")]
publicclassPageNavigation:Control,IPostBackDataHandler,IPostBackEventHandler
{
#region预界说
privatestring_style;
privateint_count;
privateint_pagesize;
privateint_pageindex;
privateint_pages;//页群
privateint_currentpages;
privatestring_first;
privatestring_pres;
privatestring_pre;
privatestring_next;
privatestring_nexts;
privatestring_last;
///<summary>
///托付页面索引事务
///</summary>
publiceventEventHandlerPageIndexChange;
#endregion
#region属性
///<summary>
///相干属性款式字符串属性
///</summary>
[Bindable(false),
Category("StyleString"),
DefaultValue("Align=left")]
publicstringStyleString
{
get
{
_style=(string)ViewState["StyleString"];
return_style;
}
set
{
_style=value;
ViewState["StyleString"]=_style;
}
}
///<summary>
///纪录总数
///</summary>
[Bindable(false),
Category("Count"),
DefaultValue(0)]
publicintCount
{
get
{
if(this.IsNumeric(ViewState["Count"]))
{
_count=(int)ViewState["Count"];
}
return_count;
}
set
{
_count=value;
ViewState["Count"]=_count;
}
}
///<summary>
///页面巨细
///</summary>
[Bindable(false),
Category("Pagesize"),
DefaultValue(10)]
publicintPagesize
{
get
{
if(this.IsNumeric(ViewState["Pagesize"]))
{
_pagesize=(int)ViewState["Pagesize"];
}
return_pagesize;
}
set
{
_pagesize=value;
ViewState["Pagesize"]=_pagesize;
}
}
///<summary>
///以后页索引
///</summary>
[Bindable(false),
Category("Pageindex"),
DefaultValue(0)]
publicintPageindex
{
get
{
if(this.IsNumeric(ViewState["Pageindex"]))
{
_pageindex=(int)ViewState["Pageindex"];
}
return_pageindex;
}
set
{
_pageindex=value;
ViewState["Pageindex"]=_pageindex;
}
}
///<summary>
///页群属性
///</summary>
publicintPages
{
get
{
if(this.IsNumeric(ViewState["Pages"]))
{
_pages=(int)ViewState["Pages"];
}
return_pages;
}
set
{
_pages=value;
ViewState["Pages"]=_pages;
}
}
///<summary>
///以后页群索引
///</summary>
publicintCurrentPages
{
get
{
if(this.IsNumeric(ViewState["CurrentPages"]))
{
_currentpages=(int)ViewState["CurrentPages"];
}
return_currentpages;
}
set
{
_currentpages=value;
ViewState["CurrentPages"]=_currentpages;
}
}
///<summary>
///标志款式
///</summary>
[Bindable(false),
Category("first"),
DefaultValue("第一页")]
publicstringFirst
{
get
{
_first=(string)ViewState["First"];
return_first;
}
set
{
_first=value;
ViewState["First"]=_first;
}
}
///<summary>
///标志款式
///</summary>
[Bindable(false),
Category("pres"),
DefaultValue("前N页")]
publicstringPres
{
get
{
_pres=(string)ViewState["Pres"];
return_pres;
}
set
{
_pres=value;
ViewState["Pres"]=_pres;
}
}
///<summary>
///标志款式
///</summary>
[Bindable(false),
Category("pre"),
DefaultValue("前一页")]
publicstringPre
{
get
{
_pre=(string)ViewState["Pre"];
return_pre;
}
set
{
_pre=value;
ViewState["Pre"]=_pre;
}
}
///<summary>
///标志款式
///</summary>
[Bindable(false),
Category("next"),
DefaultValue("后一页")]
publicstringNext
{
get
{
_next=(string)ViewState["Next"];
return_next;
}
set
{
_next=value;
ViewState["Next"]=_next;
}
}
///<summary>
///标志款式
///</summary>
[Bindable(false),
Category("nexts"),
DefaultValue("后N页")]
publicstringNexts
{
get
{
_nexts=(string)ViewState["Nexts"];
return_nexts;
}
set
{
_nexts=value;
ViewState["Nexts"]=_nexts;
}
}
///<summary>
///标志款式
///</summary>
[Bindable(false),
Category("last"),
DefaultValue("最初一页")]
publicstringLast
{
get
{
_last=(string)ViewState["Last"];
return_last;
}
set
{
_last=value;
ViewState["Last"]=_last;
}
}
#endregion
#region事务
///<summary>
///当由类完成时,使服务器控件可以处置将窗体发送到服务器时激发的事务。
///</summary>
///<paramname="e">所传送的参数</param>
publicvoidRaisePostBackEvent(stringe)
{
//当产生回送的时分改动控件以后索引
if(e=="top")
{
Pageindex=0;
CurrentPages=0;
}
elseif(e=="last")
{
Pageindex=(Count+Pagesize-1)/Pagesize-1;
CurrentPages=((Count+Pagesize-1)/Pagesize+Pages-1)/Pages-1;
if(Pageindex<0)
{
Pageindex=0;
}
if(CurrentPages<0)
{
CurrentPages=0;
}
}
elseif(e=="pre")
{
if(Pageindex>0)
{
Pageindex--;
if(Pageindex<CurrentPages*Pages&&Pageindex>0)
{
CurrentPages--;
}
}
}
elseif(e=="next")
{
if(Pageindex<(Count+Pagesize-1)/Pagesize-1)
{
Pageindex++;
if(Pageindex>(CurrentPages+1)*Pages-1&&Pageindex<Count-1)
{
CurrentPages++;
}
}
}
elseif(e=="pres")
{
Pageindex-=Pages;
if(Pageindex<0)
{
Pageindex=0;
}
if(Pageindex<CurrentPages*Pages&&Pageindex>0)
{
CurrentPages--;
}
}
elseif(e=="nexts")
{
Pageindex+=Pages;
if(Pageindex>(Count+Pagesize-1)/Pagesize-1)
{
Pageindex=(Count+Pagesize-1)/Pagesize-1;
}
if(Pageindex>(CurrentPages+1)*Pages-1&&Pageindex<Count-1)
{
CurrentPages++;
}
}
else
{
Pageindex=int.Parse(e.ToString());
}
//产生回送事务时激发OnPageIndexChange事务
OnPageIndexChange(System.EventArgs.Empty);
}
///<summary>
///当由类完成时,为ASP.NET服务器控件处置回发数据。
///</summary>
///<paramname="postDataKey">数据汇合元素索引</param>
///<paramname="values">string的排序汇合</param>
///<returns></returns>
publicboolLoadPostData(stringpostDataKey,NameValueCollectionvalues)
{
//Pageindex=Int32.Parse(values.Split(|));
//CurrentPages=Int32.Parse(values.Split(|));
returnfalse;
}
///<summary>
///当由类完成时,用旌旗灯号请求服务器控件工具关照ASP.NET使用程序该控件的形态已变动。
///</summary>
publicvoidRaisePostDataChangedEvent()
{
}
///<summary>
///当页面索引改动,触发托付
///</summary>
///<paramname="e"></param>
protectedvoidOnPageIndexChange(System.EventArgse)
{
//托付给加载控件页的PageIndexChange事务
if(PageIndexChange!=null)
{
PageIndexChange(this,e);
}
}
///<summary>
///预出现
///</summary>
///<paramname="e"></param>
protectedoverridevoidOnPreRender(EventArgse)
{
}
#endregion
#region输入
///<summary>
///将此控件出现给指定的输入参数。
///</summary>
///<paramname="output">要写出到的HTML编写器</param>
protectedoverridevoidRender(HtmlTextWriteroutput)
{
stringPagestring="";//界说页码出现字符串
stringText=null;//输入主布局字符串变量界说
intNO;
//输入主布局
Text="<div$style$>";
Text+="<ahref="javascript:"+Page.GetPostBackEventReference(this,"top")+"">"+First+"</a>";
Text+="<ahref="javascript:"+Page.GetPostBackEventReference(this,"pres")+"">"+Pres+"</a>";
Text+="<ahref="javascript:"+Page.GetPostBackEventReference(this,"pre")+"">"+Pre+"</a>";
Text+="$Pagestring$";
Text+="<ahref="javascript:"+Page.GetPostBackEventReference(this,"next")+"">"+Next+"</a>";
Text+="<ahref="javascript:"+Page.GetPostBackEventReference(this,"nexts")+"">"+Nexts+"</a>";
Text+="<ahref="javascript:"+Page.GetPostBackEventReference(this,"last")+"">"+Last+"</a>";
Text+="</div>";//<inputtype=hiddenname="+this.UniqueID+"value="+this.Pageindex+"|"+this.CurrentPages+">";
//当页巨细小于0时,复原为1,避免预算呈现除0毛病
if(!(Pagesize>0))
{
Pagesize=1;
}
//盘算出总页数,并轮回输入页码
for(inti=0;i<Pages;i++)
{
//取得页群内页码
NO=Pages*CurrentPages+i;
if(NO<(Count+Pagesize-1)/Pagesize)
{
//判别页码是不是为以后页
if(Pageindex!=NO)
{
Pagestring+="<ahref="javascript:"+Page.GetPostBackEventReference(this,NO.ToString())+"">"+(NO+1).ToString()+"</a>";
}
//假如不是,页脸部分无毗连
else
{
Pagestring+=(NO+1).ToString()+"";
}
}
}
if(!(Pagestring.Trim().Length>0))
{
Pagestring="1";
}
//交换对齐属性
Text=Text.Replace("$style$",StyleString);
//交换页码部分
Text=Text.Replace("$Pagestring$",Pagestring);
output.Write(Text);
}
#endregion
#region其他函数
///<summary>
///判别是不是为数字字符串
///</summary>
///<paramname="str">需考证的字符串</param>
///<returns>判别了局,切合前提为True,不切合前提为False</returns>
publicboolIsNumeric(stringstr)
{
//判别是不是为空
if(str==null||str.Length==0)
{
returnfalse;
}
//轮回反省每一个字符
foreach(charcinstr)
{
if(!Char.IsNumber(c))
{
returnfalse;
}
}
returntrue;
}
///<summary>
///判别是不是为数字字符串
///</summary>
///<paramname="obj">需考证的字符串</param>
///<returns>判别了局,切合前提为True,不切合前提为False</returns>
publicboolIsNumeric(objectobj)
{
obj+="";
stringstr=obj.ToString();
//判别是不是为空
if(str==null||str.Length==0)
{
returnfalse;
}
//轮回反省每一个字符
foreach(charcinstr)
{
if(!Char.IsNumber(c))
{
returnfalse;
}
}
returntrue;
}
#endregion
}
}在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 逐步缩小出错代码段的范围,最终确定错误代码的位置。 主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
页:
[1]