|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
前天傍晚我发表了《Java的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。asp.net|存储历程|分页|数据|算法起首创立一张表(请求ID主动编号):
createtableredheadedfile(
idintidentity(1,1),
filenamesnvarchar(20),
sendusernvarchar(20),
primarykey(id)
)
然后我们写进50万笔记录:
declare@iint
set@i=1
while@i<=500000
begin
insertintoredheadedfile(filenames,senduser)values(我的分页算法,陆俊铭)
set@i=@i+1
end
GO
用MicrosoftVisualStudio.NET2003创立一张WebForm网页(自己起名webform8.aspx)
前台代码片断以下(webform8.aspx):
<%@Pagelanguage="c#"Codebehind="WebForm8.aspx.cs"AutoEventWireup="false"Inherits="WebApplication6.WebForm8"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>WebForm8</title>
<metacontent="MicrosoftVisualStudio.NET7.1"name="GENERATOR">
<metacontent="C#"name="CODE_LANGUAGE">
<metacontent="JavaScript"name="vs_defaultClientScript">
<metacontent="http://schemas.microsoft.com/intellisense/ie5"name="vs_targetSchema">
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server">
<asp:datalistid="datalist1"AlternatingItemStyle-BackColor="#f3f3f3"Width="100%"CellSpacing="0"
CellPadding="0"Runat="server">
<ItemTemplate>
<tablewidth="100%"border="0"cellspacing="0"cellpadding="0">
<tr>
<tdwidth="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"filenames")%></td>
<tdwidth="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%></td>
<tdwidth="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"id")%></td>
</tr>
</table>
</ItemTemplate>
</asp:datalist>
<divalign="center">共<asp:labelid="LPageCount"Runat="server"ForeColor="#ff0000"></asp:label>页/共
<asp:labelid="LRecordCount"Runat="server"ForeColor="#ff0000"></asp:label>纪录
<asp:linkbuttonid="Fistpage"Runat="server"
CommandName="0">首页</asp:linkbutton><asp:linkbuttonid="Prevpage"Runat="server"CommandName="prev">
上一页</asp:linkbutton><asp:linkbuttonid="Nextpage"Runat="server"
CommandName="next">下一页</asp:linkbutton><asp:linkbuttonid="Lastpage"Runat="server"
CommandName="last">尾页</asp:linkbutton>以后第<asp:labelid="LCurrentPage"Runat="server"
ForeColor="#ff0000"></asp:label>页跳页<asp:TextBoxID="gotoPage"Runat="server"Width="30px"
MaxLength="5"AutoPostBack="True"></asp:TextBox></div>
</form>
</body>
</HTML>
背景代码片断以下(webform8.aspx.cs)
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
usingSystem.Configuration;
namespaceWebApplication6
{
///<summary>
///WebForm8的择要申明。
///</summary>
publicclassWebForm8:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.LinkButtonFistpage;
protectedSystem.Web.UI.WebControls.LinkButtonPrevpage;
protectedSystem.Web.UI.WebControls.LinkButtonNextpage;
protectedSystem.Web.UI.WebControls.LinkButtonLastpage;
protectedSystem.Web.UI.WebControls.DataListdatalist1;
protectedSystem.Web.UI.WebControls.DropDownListmydroplist;
protectedSystem.Web.UI.WebControls.LabelLPageCount;
protectedSystem.Web.UI.WebControls.LabelLRecordCount;
protectedSystem.Web.UI.WebControls.LabelLCurrentPage;
protectedSystem.Web.UI.WebControls.TextBoxgotoPage;
constintPageSize=20;//界说每页显现纪录
intPageCount,RecCount,CurrentPage,Pages,JumpPage;//界说几个保留分页参数变量
privatevoidPage_Load(objectsender,System.EventArgse)
{
if(!IsPostBack)
{
RecCount=Calc();//经由过程Calc()函数猎取总纪录数
PageCount=RecCount/PageSize+OverPage();//盘算总页数(加上OverPage()函数避免不足数形成显现
数据不完全)
ViewState["PageCounts"]=RecCount/PageSize-
ModPage();//保留总页参数到ViewState(减往ModPage()函数避免SQL语句实行时溢出查询局限,能够用存储历程分页算法来了解这句)
ViewState["PageIndex"]=0;//保留一个为0的页面索引值到ViewState
ViewState["JumpPages"]=PageCount;//保留PageCount到ViewState,跳页时判别用户输出数是不是超越页
码局限
//显现LPageCount、LRecordCount的形态
LPageCount.Text=PageCount.ToString();
LRecordCount.Text=RecCount.ToString();
//判别跳页文本框生效
if(RecCount<=20)
gotoPage.Enabled=false;
TDataBind();//挪用数据绑定函数TDataBind()举行数据绑定运算
}
}
//盘算余页
publicintOverPage()
{
intpages=0;
if(RecCount%PageSize!=0)
pages=1;
else
pages=0;
returnpages;
}
//盘算余页,避免SQL语句实行时溢出查询局限
publicintModPage()
{
intpages=0;
if(RecCount%PageSize==0&&RecCount!=0)
pages=1;
else
pages=0;
returnpages;
}
/*
*盘算总纪录的静态函数
*自己在这里利用静态函数的来由是:假如援用的是静态数据或静态函数,毗连器会优化天生代码,往失落静态重定位项(对
海量数据表分页效果更分明)。
*但愿人人赐与定见、若有不准确的中央看斧正。
*/
publicstaticintCalc()
{
intRecordCount=0;
SqlCommandMyCmd=newSqlCommand("selectcount(*)ascofromredheadedfile",MyCon());
SqlDataReaderdr=MyCmd.ExecuteReader();
if(dr.Read())
RecordCount=Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
returnRecordCount;
}
//数据库毗连语句(从Web.Config中猎取)
publicstaticSqlConnectionMyCon()
{
SqlConnectionMyConnection=newSqlConnection(ConfigurationSettings.AppSettings["DSN"]);
MyConnection.Open();
returnMyConnection;
}
//对四个按钮(首页、上一页、下一页、尾页)前往的CommandName值举行操纵
privatevoidPage_OnClick(objectsender,CommandEventArgse)
{
CurrentPage=(int)ViewState["PageIndex"];//从ViewState中读取页码值保留到CurrentPage变量中举行参数运
算
Pages=(int)ViewState["PageCounts"];//从ViewState中读取总页参数运算
stringcmd=e.CommandName;
switch(cmd)//选择CommandName
{
case"next":
CurrentPage++;
break;
case"prev":
CurrentPage--;
break;
case"last":
CurrentPage=Pages;
break;
default:
CurrentPage=0;
break;
}
ViewState["PageIndex"]=CurrentPage;//将运算后的CurrentPage变量再次保留至ViewState
TDataBind();//挪用数据绑定函数TDataBind()
}
privatevoidTDataBind()
{
CurrentPage=(int)ViewState["PageIndex"];//从ViewState中读取页码值保留到CurrentPage变量中举行按钮掉
效运算
Pages=(int)ViewState["PageCounts"];//从ViewState中读取总页参数举行按钮生效运算
//判别四个按钮(首页、上一页、下一页、尾页)形态
if(CurrentPage+1>1)
{
Fistpage.Enabled=true;
Prevpage.Enabled=true;
}
else
{
Fistpage.Enabled=false;
Prevpage.Enabled=false;
}
if(CurrentPage==Pages)
{
Nextpage.Enabled=false;
Lastpage.Enabled=false;
}
else
{
Nextpage.Enabled=true;
Lastpage.Enabled=true;
}
//数据绑定到DataList控件
DataSetds=newDataSet();
//中心SQL语句,举行查询运算(决意了分页的效力:))
SqlDataAdapterMyAdapter=newSqlDataAdapter("SelectTop"+PageSize+"*fromredheadedfilewhereid
notin(selecttop"+PageSize*CurrentPage+"idfromredheadedfileorderbyidasc)orderbyidasc",MyCon());
MyAdapter.Fill(ds,"news");
datalist1.DataSource=ds.Tables["news"].DefaultView;
datalist1.DataBind();
//显现Label控件LCurrentPaget和文本框控件gotoPage形态
LCurrentPage.Text=(CurrentPage+1).ToString();
gotoPage.Text=(CurrentPage+1).ToString();
//开释SqlDataAdapter
MyAdapter.Dispose();
}
#regionWeb窗体计划器天生的代码
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:该挪用是ASP.NETWeb窗体计划器所必须的。
//
InitializeComponent();
base.OnInit(e);
}
///<summary>
///计划器撑持所需的办法-不要利用代码编纂器修正
///此办法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.Fistpage.Command+=newSystem.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Prevpage.Command+=newSystem.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Nextpage.Command+=newSystem.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Lastpage.Command+=newSystem.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.gotoPage.TextChanged+=newSystem.EventHandler(this.gotoPage_TextChanged);
this.Load+=newSystem.EventHandler(this.Page_Load);
}
#endregion
//跳页代码
privatevoidgotoPage_TextChanged(objectsender,System.EventArgse)
{
try
{
JumpPage=(int)ViewState["JumpPages"];//从ViewState中读取可用页数值保留到JumpPage变量中
//判别用户输出值是不是凌驾可用页数局限值
if(Int32.Parse(gotoPage.Text)>JumpPage||Int32.Parse(gotoPage.Text)<=0)
Response.Write("<script>alert(页码局限越界!);location.href=WebForm8.aspx</script>");
else
{
intInputPage=Int32.Parse(gotoPage.Text.ToString())-1;//转换用户输出值保留在int型
InputPage变量中
ViewState["PageIndex"]=InputPage;//写进InputPage值到ViewState["PageIndex"]中
TDataBind();//挪用数据绑定函数TDataBind()再次举行数据绑定运算
}
}
//捕捉由用户输出不准确数据范例时酿成的非常
catch(Exceptionexp)
{
Response.Write("<script>alert("+exp.Message+");location.href=WebForm8.aspx</script>");
}
}
}
}
人人来尝尝,效力是否是高了良多?
若有不当看人人来斧正
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。 |
|