仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 639|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET教程之客户端回调完成gridView无革新分页

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:49:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。分页|客户端|革新|无革新因为客户对速率和功能上的请求愈来愈反常,而数据量一每天的复杂,因而自己发生了数据的查询和分页完整由客户端回调来完成。设法看上往庞大,完成起来也不难。空话未几说,看程序吧。
1、存储历程
包头:
createorreplacepackageH_QUERYPACKis
--Author:Evorul
--Created:2007-3-29
--Purpose:查询机构表

--Publictypedeclarations
typeMYCURSORisREFCURSOR;
PROCEDUREQUERYLOG(RET_CURSOROUTMYCURSOR,ERRORCODEOUTINT,p_logIDint,p_StartTimeDate,p_EndTimeDate,p_Operatorvarchar2,p_OrderFieldvarchar2,
p_Descint,p_PageSizeInt,p_PageIndexInt,p_RecordCountOutInt);
endH_QUERYPACK;

包体:
createorreplacepackagebodyH_QUERYPACKIs
--Author:Evorul
--Created:2007-3-29
--Purpose:查询

--查询公司,分页用
PROCEDUREQUERYLOG(RET_CURSOROUTMYCURSOR,ERRORCODEOUTINT,p_logIDint,p_StartTimeDate,p_EndTimeDate,p_Operatorvarchar2,p_OrderFieldvarchar2,
p_Descint,p_PageSizeInt,p_PageIndexInt,p_RecordCountOutInt)
AS
v_sqlvarchar2(3000);
v_sqlcountvarchar2(3000);
v_orderfieldvarchar2(100);
v_orderVARCHAR2(5);--按次
v_countint;
v_heiRownumint;
v_lowRownumint;
BEGIN
ERRORCODE:=0;
v_sql:=select*fromLOGWhere1=1;
if(p_logID0)then
v_sql:=v_sql||andid=||TO_CHAR(p_logID);
endif;
IFp_OperatorIsNotNullThenthen
v_sql:=v_sql||AndoperatorLIKE%||RTRIM(LTRIM(p_Operator))||%;
endif;
v_sql:=v_sql||and(TO_CHAR(time,YYYYMMDD)between||to_char(p_StartTime,YYYYMMDD)||and||to_char(p_EndTime,YYYYMMDD)||);


----取纪录总数
v_sqlcount:=selectcount(*)from(||v_sql||);
executeimmediatev_sqlcountintov_count;
p_RecordCount:=v_count;
--排序字段
IFp_OrderFieldISNOTNULLTHEN
v_orderfield:=p_OrderField;
Else
v_orderfield:=ID;
ENDIF;
--是不是降序
IFp_Desc0THEN
v_order:=ASC;
Else
v_order:=DESC;
ENDIF;

v_sql:=v_sql||ORDERBY||v_orderfield||v_order;
----实行分页查询
v_heiRownum:=p_PageIndex*p_PageSize;
v_lowRownum:=v_heiRownum-p_PageSize+1;
v_sql:=SELECT*FROM(
SELECTA.*,rownumrnFROM(||v_sql||)AWHERErownum<=||to_char(v_heiRownum)||)BWHERErn>=||to_char(v_lowRownum);

OPENRET_CURSORFORv_sql;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
ERRORCODE:=9999;
WHENOTHERSTHEN
ERRORCODE:=9999;
ENDQUERYLOG;

ENDH_QUERYPACK;
2、程序
DataAccess.cs
usingSystem;
usingSystem.Data;
usingSystem.Data.OracleClient;
usingSystem.Collections;
usingSystem.Collections.Specialized;
/**////<summary>
///数据层author:EvoRuldate:2007-03-29
///</summary>
publicclassDataAccess
...{
/**////<summary>
///前往数据库毗连字符串
///</summary>
publicstaticStringDatabaseConnectionString
...{
get
...{
NameValueCollectionconfigSettings=(NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");
returnconfigSettings["connectionString"];
}
}
/**////<summary>
///前往每页显现的记录数
///</summary>
publicstaticintRowsPerPage
...{
get
...{
NameValueCollectionconfigSettings=(NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");
returnConvert.ToInt32(configSettings["rowsPerPage"]);
}
}
/**////<summary>
///猎取特定日记汇合
///</summary>
///<paramname="typeID">日记范例</param>
///<paramname="userID">操纵人</param>
///<paramname="strOrderField">排序字段</param>
///<paramname="intASC">是不是升序0-降序,1-升</param>
///<paramname="PageIndex">页码</param>
///<paramname="rowCount">页行数</param>
///<paramname="recordSum">切合前提的总纪录数</param>
///<returns></returns>
publicstaticArrayListQueryLog(stringstrOperator,DateTimedtStartTime,DateTimedtEndTime,stringstrOrderField,
intintASC,intPageIndex,introwCount,outintrecordSum)
...{
//前往汇合
ArrayListmyArrayList=newArrayList();
//创立毗连
OracleConnectionmyConnection=newOracleConnection(DatabaseConnectionString);
try
...{
//翻开毗连
myConnection.Open();
}
catch(Exceptionex)
...{
throw(ex);
}
try
...{
//创立存储历程
OracleCommandmyCommand=newOracleCommand("H_QUERYPACK.QUERYLOG",myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
OracleDataReaderdr;
//==============================参数界说==============================
//前往值
myCommand.Parameters.Add("RET_CURSOR",OracleType.Cursor);
myCommand.Parameters["RET_CURSOR"].Direction=ParameterDirection.Output;
OracleParameterret=myCommand.Parameters.Add("ERRORCODE",OracleType.Int32);
ret.Direction=ParameterDirection.Output;
OracleParameterretCountSum=myCommand.Parameters.AddWithValue("p_RecordCount",OracleType.Int32);
retCountSum.Direction=ParameterDirection.Output;
//编号
myCommand.Parameters.AddWithValue("p_logID",OracleType.Int32).Value=0;
//用户编号
myCommand.Parameters.AddWithValue("p_Operator",OracleType.VarChar).Value=strOperator;
//工夫上限
myCommand.Parameters.AddWithValue("p_StartTime",OracleType.DateTime).Value=dtStartTime;
//工夫下限
myCommand.Parameters.AddWithValue("p_EndTime",OracleType.DateTime).Value=dtEndTime;
//排序字段
myCommand.Parameters.AddWithValue("p_OrderField",OracleType.VarChar).Value=strOrderField;
//怎样排序
myCommand.Parameters.AddWithValue("p_Desc",OracleType.Int32).Value=intASC;
//每页行数
myCommand.Parameters.AddWithValue("p_PageSize",OracleType.Int32).Value=rowCount;
//页码
myCommand.Parameters.AddWithValue("p_PageIndex",OracleType.Int32).Value=PageIndex;
//============================参数界说终了============================
//实行存储历程
dr=myCommand.ExecuteReader();
//实行未乐成
if(Convert.ToInt32(ret.Value)!=0)
thrownewException("实行存储历程堕落!");
//总纪录数
recordSum=Convert.ToInt32(retCountSum.Value);

while(dr.Read())
...{
//创立新日记
Loglog=newLog();
//操纵营业范例
if(dr["operationtype"]!=DBNull.Value)
...{
log.OperationType=Convert.ToString(dr["operationtype"]);
}
//工夫
if(dr["time"]!=DBNull.Value)
log.Time=Convert.ToDateTime(dr["time"]);
//用户
if(dr["operator"]!=DBNull.Value)
...{
log.Operator=Convert.ToString(dr["operator"]);
}
//信息
if(dr["info"]!=DBNull.Value)
log.Info=Convert.ToString(dr["info"]);
//到场前往汇合
myArrayList.Add(log);
}
dr.Close();
returnmyArrayList;
}
catch(Exceptionex)
...{
throw(ex);
}
finally
...{
myConnection.Close();
}
}
}
DataLogic.cs
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
/**////<summary>
///营业逻辑层author:EvoRuldate:2007-03-29
///</summary>
publicclassDataLogic
...{
publicDataLogic()
...{
}
publicstaticintrecordSum=0;

/**////<summary>
///查询日记
///</summary>
///<paramname="strOperator">操纵人</param>
///<paramname="dtStarTime">工夫局限上限</param>
///<paramname="dtEndTime">工夫下限</param>
///<paramname="Pageid">页码</param>
///<returns></returns>
publicstaticIEnumerableGetLogData(stringstrOperator,DateTimedtStarTime,DateTimedtEndTime,stringPageid)
...{
returnLog.GetList(strOperator,dtStarTime,dtEndTime,"time",1,Convert.ToInt32(Pageid),DataAccess.RowsPerPage,outrecordSum);
}
}
Log.cs
usingSystem;
usingSystem.Data;
usingSystem.Collections;
/**////<summary>
///日记类
///</summary>
publicclassLog
...{
//==============================成员==============================
protectedstringoperationType;
/**////<summary>
///工夫
///</summary>
protectedDateTimetime=newDateTime();
/**////<summary>
///用户
///</summary>
protectedstringm_operator;
/**////<summary>
///信息
///</summary>
protectedstringinfo="";

//==============================属性==============================
publicstringOperationType
...{
get...{returnoperationType;}
set...{operationType=value;}
}
/**////<summary>
///工夫
///</summary>
publicDateTimeTime
...{
get...{returntime;}
set...{time=value;}
}

/**////<summary>
///用户
///</summary>
publicstringOperator
...{
get...{returnm_operator;}
set...{m_operator=value;}
}
/**////<summary>
///信息
///</summary>
publicstringInfo
...{
get...{returninfo;}
set...{info=value;}
}
//==============================办法==============================
/**////<summary>
///创立空日记实例
///</summary>
publicLog()
...{
}
/**////<summary>
///新增日记
///</summary>
publicvoidAdd()
...{
try
...{
//暂不撑持该办法
thrownewException("新增日记");
}
catch(Exceptionex)
...{
throw(ex);
}
}
/**////<summary>
///修正日记(不撑持)
///</summary>
publicvoidModify()
...{
//暂不撑持该办法
thrownewException("修正日记");
}
/**////<summary>
///删除日记
///</summary>
publicvoidDel()
...{
//暂不撑持该办法
thrownewException("修正日记");
}
/**////<summary>
///猎取特定的日记集
///</summary>
///<paramname="strOperator">操纵人</param>
///<paramname="dtStartTime">入手下手工夫</param>
///<paramname="dtEndTime">停止工夫</param>
///<paramname="strOrderField">排序字段</param>
///<paramname="intASC">0-降序,1-升序</param>
///<paramname="PageIndex">页码</param>
///<paramname="rowCount">页行数</param>
///<paramname="recordSum">总纪录数</param>
///<returns></returns>
publicstaticArrayListGetList(stringstrOperator,DateTimedtStartTime,DateTimedtEndTime,stringstrOrderField,intintASC,intPageIndex,introwCount,outintrecordSum)
...{
returnDataAccess.QueryLog(strOperator,dtStartTime,dtEndTime,strOrderField,intASC,PageIndex,rowCount,outrecordSum);
}
}
前台页Default.aspx
<%...@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>客户端回调</title>
<styletype="text/CSS">...

body{...}{
font-size:12px;
color:#525252;
}
td{...}{
font-size:12px;
color:#525252;
}
th{...}{
font-size:12px
}
a:link{...}{
color:#000000;text-decoration:none
}
a:visited{...}{
color:#525252;text-decoration:none
}
a:hover{...}{
color:#0095A7;text-decoration:underline
}
td.alt_1{...}{
border-top:1pxsolid#d6d6d6;
border-right:1pxsolid#d6d6d6;
font-size:12px;
color:#4f6b72;
}
td.alt_2{...}{
border-top:1pxsolid#d6d6d6;
border-right:1pxsolid#d6d6d6;
}
td.alt_3{...}{
border-left:1pxsolid#d6d6d6;
border-bottom:1pxsolid#d6d6d6;
}
td.alt_4{...}{
border-left:1pxsolid#d6d6d6;
border-right:1pxsolid#d6d6d6;
}
</style>

<scripttype="text/javascript">...
//author:EvoRuldate:2007-03-25
varPageIndex=1;

functionQueryServer(objOperator,objStartTime,objEndTime,intIndex,boolReset)
...{
context=gridspan;
context.innerHTML="
日记查询</td>
</tr>
<tr>
<tdclass="alt_4"valign="top"colspan="2"align="center">
<tablecellpadding="0"cellspacing="0"border="0"width="95%">
<tr>
<tdstyle="width:120px;height:30px;"align="right">
操纵职员:</td>
<tdalign="left"style="width:143px">
<asp:TextBoxID="txtOperator"runat="server"CssClass="border"ReadOnly="False"
Width="90px"></asp:TextBox></td>
<tdstyle="width:71px;height:30px;"align="right">
操纵工夫:</td>
<tdalign="left">
<asp:TextBoxID="TxtStartTime"runat="server"CssClass="border"
ReadOnly="False"Width="90px"></asp:TextBox>-<asp:TextBox
ID="TxtEndTime"runat="server"CssClass="border"
ReadOnly="False"Width="90px"></asp:TextBox></td>
</tr>
<tr>
<tdcolspan="4"style="background-image:url(../images/point.gif);height:12px;"></td>
</tr>
<tr>
<tdcolspan="4"style="height:30px;text-align:center;">
<asp:ButtonID="Submit"runat="server"CssClass="btn2"Text="断定"Height="20px"Width="50px"/></td>
</tr>
</table>
</td>
</tr>
<tr>
<tdcolspan="2"align="center">
<tablecellpadding="0"cellspacing="0"border="0"width="100%">
<tr>
<tdstyle="width:100%;"class="alt_3"> </td>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
<spanid="gridspan">
<asp:GridViewID="Logs"runat="server"AutoGenerateColumns="False"
GridLines="Horizontal"PageSize="15"
Width="95%"BackColor="White"BorderColor="#336666"BorderStyle="Double"BorderWidth="3px"CellPadding="4">
<RowStyleForeColor="#333333"Height="24px"BackColor="White"/>
<SelectedRowStyleBorderColor="Red"BackColor="#339966"Font-Bold="True"ForeColor="White"/>
<HeaderStyleBackColor="#336666"ForeColor="White"Height="30px"Font-Bold="True"/>
<AlternatingRowStyleBorderWidth="1px"/>
<Columns>
<asp:TemplateFieldHeaderText="用户">
<ItemTemplate>
<asp:HyperLinkID="HyperLink1"runat="server"NavigateUrl=""Text=<%#Eval("UserInfo.Name")%>></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="范例">
<ItemTemplate>
<asp:HyperLinkID="HyperLink2"runat="server"NavigateUrl=""Text=<%#Eval("Type.Name")%>></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="工夫">
<ItemTemplate>
<asp:HyperLinkID="HyperLink4"runat="server"NavigateUrl=""Text=<%#Eval("Time")%>></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="备注">
<ItemTemplate>
<asp:HyperLinkID="HyperLink5"runat="server"NavigateUrl=""Text=<%#Eval("Info")%>></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyleBackColor="White"ForeColor="#333333"/>
<PagerStyleBackColor="#336666"ForeColor="White"HorizontalAlign="Center"/>
</asp:GridView>
</span>
<tableborder="0"cellpadding="0"cellspacing="0"bordercolorlight="#000000"bordercolordark="#ffffff">
<tr>
<tdalign="center"nowrapstyle="height:25px;width:601px;">
共有<asp:LabelID="RecordSum"runat="server"/>条<asp:LabelID="PageSum"runat="server"/>页了局
以后显现为第<asp:LabelID="CurrentPage"runat="server"/>页15条/页
<asp:LabelID="LinkUp"runat="server">上一页</asp:Label>
<asp:LabelID="Linkdown"runat="server">下一页</asp:Label>
跳转至第<spanid="SpanIndex"><asp:DropDownListID="DownListIndex"runat="server"Width="50px">
</asp:DropDownList></span>页
</td>
</tr>
</table>

<asp:ObjectDataSourceID="DataSourceLog"runat="server"TypeName="DataLogic"SelectMethod="GetLogData">
<SelectParameters>
<asp:ControlParameterControlID="txtOperator"DefaultValue=""Name="strOperator"PropertyName="Text"
Type="string"/>
<asp:ControlParameterControlID="TxtStartTime"DefaultValue="1753-1-1"Name="dtStarTime"
PropertyName="Text"Type="DateTime"/>
<asp:ControlParameterControlID="TxtEndTime"DefaultValue="9999-12-31"Name="dtEndTime"
PropertyName="Text"Type="DateTime"/>
<asp:ControlParameterName="Pageid"ControlID="DownListIndex"DefaultValue="1"PropertyName="SelectedValue"Type="String"/>
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
</table>

</div>
</form>
</body>
</html>
Default.aspx.cs
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.IO;
usingSystem.Text;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
usingSystem.Globalization;
publicpartialclass_Default:System.Web.UI.Page,ICallbackEventHandler
...{
protectedvoidPage_Load(objectsender,EventArgse)
...{
this.Submit.Attributes.Add("onclick","QueryServer(txtOperator,TxtStartTime,TxtEndTime,1,"true");returnfalse;");
this.DownListIndex.Attributes.Add("onchange","QueryServer(txtOperator,TxtStartTime,TxtEndTime,this.value,"false");returnfalse;");
}
回调分页#region回调分页
privatestringserverReturn;
publicstringGetCallbackResult()
...{
string[]parts=serverReturn.Split(|);
//依据传送的办法名举行挪用,并传送响应的参数,今朝只撑持一个参数
return(string)GetType().GetMethod(parts[0]).Invoke(this,newobject[]...{parts[1]});
}
publicvoidRaiseCallbackEvent(stringeventArgument)
...{
serverReturn=eventArgument;
}
/**////<summary>
///依据从客户端传来的值,对GridView的内容举行更新,并将更新后的GridView的html前往
///</summary>
///<paramname="arg"></param>
///<returns></returns>
publicstringServerMethodQuery(stringarg)
...{
Logs.DataSourceID="DataSourceLog";
string[]arrayArg=arg.Split($);
this.txtOperator.Text=arrayArg[0];
this.TxtStartTime.Text=arrayArg[1];
this.TxtEndTime.Text=arrayArg[2];
intialPageSelect();
this.DownListIndex.SelectedValue=arrayArg[3];
Logs.DataBind();
//传进客户端字符串,并用"$"支解
StringBuilderstrHtml=newStringBuilder();
strHtml.Append(RenderControl(Logs));
strHtml.Append("$");
strHtml.Append(DataLogic.recordSum.ToString());
strHtml.Append("$");
strHtml.Append(Convert.ToString(DataLogic.recordSum/DataAccess.RowsPerPage+1));
strHtml.Append("$");
strHtml.Append(arrayArg[3]);
if(arrayArg[4]=="true")
...{
strHtml.Append("$");
intialPageSelect();
strHtml.Append(RenderControl(DownListIndex));
}
returnstrHtml.ToString();
}
privatestringRenderControl(Controlcontrol)
...{
StringWriterwriter1=newStringWriter(CultureInfo.InvariantCulture);
HtmlTextWriterwriter2=newHtmlTextWriter(writer1);
control.RenderControl(writer2);
writer2.Flush();
writer2.Close();
returnwriter1.ToString();
}
/**////<summary>
///初始化页下拉单
///</summary>
privatevoidintialPageSelect()
...{
DownListIndex.Items.Clear();
for(inti=0;i<(DataLogic.recordSum/DataAccess.RowsPerPage+1);i++)
...{
this.DownListIndex.Items.Add(Convert.ToString(i+1));
}
}
#endregion
}
若有毛病,接待斧正!
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-19 08:30:45 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
小女巫 该用户已被删除
板凳
发表于 2015-1-24 11:26:35 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
若天明 该用户已被删除
地板
发表于 2015-2-1 08:16:42 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
分手快乐 该用户已被删除
5#
发表于 2015-2-7 01:41:40 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-19 13:43:27 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
再现理想 该用户已被删除
7#
 楼主| 发表于 2015-3-6 14:54:50 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
简单生活 该用户已被删除
8#
发表于 2015-3-13 02:09:34 | 只看该作者
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
活着的死人 该用户已被删除
9#
发表于 2015-3-20 10:10:24 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-24 20:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表